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 (); } }