Sample Code: Using Dropdownlist in Editable DataGrid
This article demonstrates how to use Dropdownlist in Editable DataGrid
Html Source
<asp:DataGrid id="DataGrid1" AutoGenerateColumns="False" ItemStyle-CssClass="cdb-AltRow"
AlternatingItemStyle-CssClass="cdb-AltRow2"
DataKeyField="ProductID" OnUpdateCommand="DataGrid1_Update" OnEditCommand="DataGrid1_Edit"
OnCancelCommand="DataGrid1_Cancel" runat="server">
<Columns>
<asp:TemplateColumn HeaderText="Discontinued">
<ItemTemplate>
<asp:Label ID="lblDiscontinued"
Text='<%#ShowVal(Convert.ToBoolean(
DataBinder.Eval(Container.DataItem, "Discontinued").ToString()) )%>'
Runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:Label runat="server" id="lblProductID" Visible="False"
Text='<%#
DataBinder.Eval(Container.DataItem, "ProductId") %>'/>
<asp:Label ID="lblEditDiscontinued"
Text='<%#ShowVal(Convert.ToBoolean(
DataBinder.Eval(Container.DataItem, "Discontinued").ToString() ))%>'
Runat="server" />
<asp:DropDownList id="ddlDiscontinued"
DataSource="<%# BindTheDiscontinued() %>"
OnPreRender="SetDropDownIndex"
DataTextField="Discontinued"
DataValueField="Discontinued"
runat="server" />
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumn
EditText="Edit" CancelText="Cancel" UpdateText="Update"
ItemStyle-Width="100px"
HeaderText="Commands" />
</Columns>
</asp:DataGrid>Code Behind
string strDiscontinued;
GetData obj;
string strSql;
string strConn;
DataSet ds;
SqlDataReader dr;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
strConn ="server=localhost;uid=sa;pwd=;database=northwind";
if (!Page.IsPostBack )
{
BindGrid();
}
}
//*******
//To Bind the DataGrid
//*******
void BindGrid()
{
obj=new GetData ();
strSql = "Select productid, discontinued from Products";
ds=obj.GetDataFromTable (strSql ,strConn);
DataGrid1.DataSource =ds;
DataGrid1.DataBind ();
}
//*******
//To display Yes/No for True/False
//*******
protected string ShowVal(bool blnval)
{
if (blnval==true)
{
return "Yes";
}
else
{
return "No";
}
}
//*******
//Bind the Data to the dropdownlist in the EditTemplate
//*******
protected SqlDataReader BindTheDiscontinued()
{
obj=new GetData ();
strSql ="SELECT distinct 'Discontinued' =" ;
strSql+=" CASE ";
strSql+=" WHEN Discontinued = 1 Then 'Yes'" ;
strSql+=" ELSE 'No'" ;
strSql+=" END " ;
strSql+=" From Products ";
dr=obj.GetSingleDataUsingReader (strSql ,strConn);
return dr;
}
//*******
//Set the Text of the Dropdownlist to the field value in Database
//*******
protected void SetDropDownIndex(Object sender ,System.EventArgs e )
{
DropDownList ed ;
ed = (DropDownList) sender;
ed.SelectedIndex = ed.Items.IndexOf(ed.Items.FindByText(strDiscontinued));
}
//*******
//For Edit Update Cancel
//*******
public void DataGrid1_Edit(Object sender, DataGridCommandEventArgs e)
{
strDiscontinued = ((Label )e.Item.FindControl("lblDiscontinued")).Text;
DataGrid1.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}
public void DataGrid1_Update(Object sender, DataGridCommandEventArgs e)
{
DropDownList TempList ;
String TempValue ;
TempList = (DropDownList) e.Item.FindControl("ddlDiscontinued");
TempValue = TempList.SelectedItem.Value;
//Place update code here
Response.Write (TempValue);
DataGrid1.EditItemIndex = -1;
BindGrid();
}
public void DataGrid1_Cancel(Object sender, DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = -1;
BindGrid();
}
//
//*******
//Functions used in Class GetData.cs
//*******
SqlConnection mycn;
SqlDataAdapter myda;
SqlCommand mycmd;
DataSet ds;
String strConn;
SqlDataReader myReader;
public DataSet GetDataFromTable(string strSQL ,string strConnString)
{
try
{
strConn=strConnString;
mycn = new SqlConnection(strConn);
myda = new SqlDataAdapter (strSQL, mycn);
ds= new DataSet ();
myda.Fill (ds,"Table");
return ds;
}
catch(Exception ex)
{
throw new Exception (ex.Message.ToString ());
}
finally
{
mycn.Close ();
}
}
public SqlDataReader GetSingleDataUsingReader(string strSQL ,string strConnString)
{
try
{
strConn=strConnString;
mycn = new SqlConnection(strConn);
mycmd = new SqlCommand (strSQL, mycn);
mycn.Open ();
myReader=mycmd.ExecuteReader(CommandBehavior.CloseConnection );
return myReader;
}
catch(Exception ex)
{
throw new Exception (ex.Message.ToString ());
}
finally
{
//mycn.Close ();
}
}