Hello and apologies in advance for the amount of code in this post. I've
also sent this message to the Sharepoint group, but thought that ASP.NET
developers may also be able to help, even though it's a Sharepoint WebPart.
I'm trying to do something fairly simple, create a datagrid that displays
where
and when a person works and allows them to change some of the information
via DropDownLists.
When the user clicks to edit a row, three of the columns appear as
DropDownLists and should show the current value.
For the 'day of the week' and 'part of the day', selecting the current value
is easy as it's the same as the value shown by the label, i.e. the
DataTextField and DataValueField are the same for those DropDownLists.
However, the 'place' DropDownList has a DataTextField of 'place' and the
DataValueField is 'place code'. I can't select an item in the DropDownList
by using what is in the label, as the label displays the 'place'.
To get around this, I added an extra column for 'place code' and hoped I
could set the SelectedValue of the DropDownList equal to the value of this
label when I'm binding the DropDownList, but I can't seem to get this
working.
Ideally, I would like to do this without the extra 'place code' column,
which I intended to make invisible, but anything is better than what I have
now!
Any help would be greatly appreciated.
Here's the code.... I've tried to make it a little more generic and removed
the namespace declaration etc.
--------------------------------------------
public class EditDays : Microsoft.Share Point.WebPartPa ges.WebPart
{
// My controls
protected DataGrid dgDays;;
Label lblMessages;
private const string defaultText = "";
private string text = defaultText;
[Browsable(false ),
Category("Misce llaneous"),
DefaultValue(de faultText),
WebPartStorage( Storage.Persona l),
FriendlyName("T ext"),
Description("Te xt Property")]
public string Text
{
get
{
return text;
}
set
{
text = value;
}
}
protected override void RenderWebPart(H tmlTextWriter output)
{
if (dgDays.Items.C ount <= 0 && lblMessages.Tex t == "")
{
lblMessages.Tex t = "<b>No days found.</b>";
}
else
{
dgDays.RenderCo ntrol(output);
}
lblMessages.Ren derControl(outp ut);
}
protected override void CreateChildCont rols()
{
//base.CreateChil dControls ();
dgDays = new DataGrid();
dgDays.BorderWi dth = 0;
dgDays.CellPadd ing = 5;
dgDays.Alternat ingItemStyle.Cs sClass = "ms-alternating";
dgDays.HeaderSt yle.CssClass = "ms-alternating";
dgDays.HeaderSt yle.Font.Bold = true;
dgDays.AutoGene rateColumns = false;
// Add Edit and Delete Columns
EditCommandColu mn colEdit = new EditCommandColu mn();
colEdit.ButtonT ype = ButtonColumnTyp e.LinkButton;
colEdit.EditTex t = "Edit";
colEdit.CancelT ext = "Cancel";
colEdit.UpdateT ext = "Update";
// Add the columns
TemplateColumn colPerson = new TemplateColumn( );
TemplateColumn colPlace = new TemplateColumn( );
TemplateColumn colDayOfTheWeek = new TemplateColumn( );
TemplateColumn colPartOfTheDay = new TemplateColumn( );
TemplateColumn colPlaceCode = new TemplateColumn( );
colPerson.ItemT emplate =
new DataGridTemplat e(ListItemType. Item, "person");
colPerson.EditI temTemplate =
new DataGridTemplat e(ListItemType. Item, "person");
colPerson.Heade rTemplate =
new DataGridTemplat e(ListItemType. Header, "person");
dgDays.Columns. Add(colPerson);
colPlaceCode.It emTemplate =
new DataGridTemplat e(ListItemType. Item, "place code");
colPlaceCode.Ed itItemTemplate =
new DataGridTemplat e(ListItemType. Item, "place code");
colPlaceCode.He aderTemplate =
new DataGridTemplat e(ListItemType. Header, "place code");
dgDays.Columns. Add(colPlaceCod e);
colPlace.ItemTe mplate =
new DataGridTemplat e(ListItemType. Item, "place");
colPlace.EditIt emTemplate =
new DataGridTemplat e(ListItemType. EditItem, "place");
colPlace.Header Template =
new DataGridTemplat e(ListItemType. Header, "place");
dgDays.Columns. Add(colPlace);
colDayOfTheWeek .ItemTemplate =
new DataGridTemplat e(ListItemType. Item, "day of the week");
colDayOfTheWeek .EditItemTempla te =
new DataGridTemplat e(ListItemType. EditItem, "day of the week");
colDayOfTheWeek .HeaderTemplate =
new DataGridTemplat e(ListItemType. Header, "day of the week");
dgDays.Columns. Add(colDayOfThe Week);
colPartOfTheDay .ItemTemplate =
new DataGridTemplat e(ListItemType. Item, "part of the day");
colPartOfTheDay .EditItemTempla te =
new DataGridTemplat e(ListItemType. EditItem, "part of the day");
colPartOfTheDay .HeaderTemplate =
new DataGridTemplat e(ListItemType. Header, "part of the day");
dgDays.Columns. Add(colPartOfTh eDay);
// Add edit and delete columns last so that they appear at the end
dgDays.Columns. Add(colEdit);
// Add event handler
dgDays.ItemComm and +=
new DataGridCommand EventHandler(dg Days_ItemComman d);
lblMessages = new Label();
this.Controls.A dd(dgDays);
this.Controls.A dd(lblMessages) ;
BindGrid();
}
protected void BindGrid()
{
SqlConnection cnn = new SqlConnection
(ConfigurationS ettings.AppSett ings["sqlConnectionS tring"]);
SqlDataAdapter da = new SqlDataAdapter( "get_days_byid" , cnn);
da.SelectComman d.CommandType = CommandType.Sto redProcedure;
da.SelectComman d.Parameters.Ad d("@user_id", SqlDbType.VarCh ar,20);
da.SelectComman d.Parameters["@user_id"].Value =
HttpContext.Cur rent.User.Ident ity.Name;
DataTable dt = new DataTable();
try
{
cnn.Open();
da.Fill(dt);
dgDays.DataSour ce = dt;
dgDays.DataBind ();
}
catch(Exception ex)
{
lblMessages.Tex t = ex.Message;
}
finally
{
cnn.Close();
}
}
protected void dgDays_ItemComm and(Object source, DataGridCommand EventArgs
e)
{
switch (e.CommandName. ToLower())
{
case "edit":
dgDays.EditItem Index = e.Item.ItemInde x;
break;
case "cancel":
dgDays.EditItem Index = -1;
break;
}
BindGrid();
}
}
// Class used to add template columns to datagrid
public class DataGridTemplat e : ITemplate
{
private string columnName;
private ListItemType itemType;
public DataGridTemplat e(ListItemType ItemType, string ColumnName)
{
columnName = ColumnName;
itemType = ItemType;
}
public void InstantiateIn(C ontrol container)
{
DropDownList ddl;
Literal l;
Label lbl;
switch (columnName.ToL ower())
{
case "person" :
switch (itemType)
{
case (ListItemType.H eader) :
l = new Literal();
l.Text = "Person";
container.Contr ols.Add(l);
break;
case (ListItemType.I tem) :
lbl = new Label();
lbl.DataBinding += new EventHandler(lb lPerson_DataBin ding);
container.Contr ols.Add(lbl);
break;
}
break;
case "place" :
switch (itemType)
{
case (ListItemType.H eader) :
l = new Literal();
l.Text = "Place";
container.Contr ols.Add(l);
break;
case (ListItemType.I tem) :
lbl = new Label();
lbl.DataBinding += new EventHandler(lb lPlace_DataBind ing);
container.Contr ols.Add(lbl);
break;
case (ListItemType.E ditItem) :
ddl = new DropDownList();
ddl.DataBinding += new EventHandler(dd lPlace_DataBind ing);
container.Contr ols.Add(ddl);
break;
}
break;
case "part of the day" :
switch (itemType)
{
case (ListItemType.H eader) :
l = new Literal();
l.Text = "Part of the Day";
container.Contr ols.Add(l);
break;
case (ListItemType.I tem) :
lbl = new Label();
lbl.DataBinding +=
new EventHandler(lb lPartOfTheDay_D ataBinding);
container.Contr ols.Add(lbl);
break;
case (ListItemType.E ditItem) :
ddl = new DropDownList();
ddl.DataBinding +=
new EventHandler(dd lPartOfTheDay_D ataBinding);
container.Contr ols.Add(ddl);
break;
}
break;
case "day of the week" :
switch (itemType)
{
case (ListItemType.H eader) :
l = new Literal();
l.Text = "Day of the Week";
container.Contr ols.Add(l);
break;
case (ListItemType.I tem) :
lbl = new Label();
lbl.DataBinding +=
new EventHandler(lb lDayOfTheWeek_D ataBinding);
container.Contr ols.Add(lbl);
break;
case (ListItemType.E ditItem) :
ddl = new DropDownList();
ddl.DataBinding +=
new EventHandler(dd lDayOfTheWeek_D ataBinding);
container.Contr ols.Add(ddl);
break;
}
break;
case "place code" :
switch (itemType)
{
case (ListItemType.H eader) :
l = new Literal();
l.Text = "Place Code";
container.Contr ols.Add(l);
break;
case (ListItemType.I tem) :
lbl = new Label();
lbl.ID = "place code";
lbl.DataBinding +=
new EventHandler(lb lPlaceCode_Data Binding);
container.Contr ols.Add(lbl);
break;
}
break;
}
}
protected void lblDayOfTheWeek _DataBinding(Ob ject source, System.EventArg s
e)
{
Label lbl = (Label) source;
DataGridItem container = (DataGridItem) lbl.NamingConta iner;
lbl.Text = (string) DataBinder.Eval (container.Data Item, "day of the
week");
}
protected void lblPlace_DataBi nding(Object source, System.EventArg s e)
{
Label lbl = (Label) source;
DataGridItem container = (DataGridItem) lbl.NamingConta iner;
lbl.Text = (string) DataBinder.Eval (container.Data Item, "place");
}
protected void lblPartOfTheDay _DataBinding(Ob ject source, System.EventArg s
e)
{
Label lbl = (Label) source;
DataGridItem container = (DataGridItem) lbl.NamingConta iner;
lbl.Text = (string) DataBinder.Eval (container.Data Item, "part of the
day");
}
protected void ddlDayOfTheWeek _DataBinding(Ob ject source, System.EventArg s
e)
{
DropDownList ddl = (DropDownList) source;
DataGridItem container = (DataGridItem) ddl.NamingConta iner;
ddl.Items.Add(n ew ListItem("Mon", "Mon"));
ddl.Items.Add(n ew ListItem("Tue", "Tue"));
ddl.Items.Add(n ew ListItem("Wed", "Wed"));
ddl.Items.Add(n ew ListItem("Thu", "Thu"));
ddl.Items.Add(n ew ListItem("Fri", "Fri"));
ddl.Items.Add(n ew ListItem("Sat", "Sat"));
ddl.Items.Add(n ew ListItem("Sun", "Sun"));
ddl.SelectedVal ue =
(string) DataBinder.Eval (container.Data Item, "day of the week");
}
protected void ddlPlace_DataBi nding(Object source, System.EventArg s e)
{
DropDownList ddl = (DropDownList) source;
DataGridItem container = (DataGridItem) ddl.NamingConta iner;
ddl.DataTextFie ld = "place name";
ddl.DataValueFi eld = "place code";
ddl.DataSource = GetLookupTable( "get_places ");
//
}
protected void ddlPartOfTheDay _DataBinding(Ob ject source, System.EventArg s
e)
{
DropDownList ddl = (DropDownList) source;
DataGridItem container = (DataGridItem) ddl.NamingConta iner;
ddl.Items.Add(n ew ListItem("All Day","All Day"));
ddl.Items.Add(n ew ListItem("Morni ng","Morning")) ;
ddl.Items.Add(n ew ListItem("After noon","Afternoo n"));
ddl.SelectedVal ue =
(string) DataBinder.Eval (container.Data Item, "part of the day");
}
protected void lblPerson_DataB inding(Object source, System.EventArg s e)
{
Label lbl = (Label) source;
DataGridItem container = (DataGridItem) lbl.NamingConta iner;
lbl.Text = (string) DataBinder.Eval (container.Data Item, "person");
}
protected void lblPlaceCode_Da taBinding(Objec t source, System.EventArg s e)
{
Label lbl = (Label) source;
DataGridItem container = (DataGridItem) lbl.NamingConta iner;
lbl.Text = (string) DataBinder.Eval (container.Data Item, "place code");
}
protected SqlDataReader GetLookupTable( string StoredProcedure )
{
SqlConnection cnn = new SqlConnection
(ConfigurationS ettings.AppSett ings["sqlConnectionS tring"]);
SqlCommand cmd = new SqlCommand(Stor edProcedure, cnn);
cmd.CommandType = CommandType.Sto redProcedure;
try
{
cnn.Open();
SqlDataReader dr = cmd.ExecuteRead er();
return dr;
}
catch(Exception ex)
{
return null;
}
}
}
}