How to set the maxlength of a textbox (in the EditTemplate of DataGrid) based on a field value in the record
<EditItemTemplate> <asp:TextBox runat=’server’ id=’txtField’ MaxLength=’<%# DataBinder.Eval(Container.DataItem, ‘FieldSize’) %>’ /> </EditItemTemplate>
How to use a dropdownlist in a DataGrid
Step 1: Display the Data in the Datagrid Initially the Datagrid is populated with the records in the db The field Discontinued is of data type bit in the db i.e 0/1. To display it as yes/no in the Datagrid a helper function ShowVal(…) is called Step 2: To Edit the Datagrid , When the edit button is clicked it should display field Discontinued as Yes/No To update the record the user should get a choice to Select Yes/No using dropdownlist By default the dropdownlist should be set to the value in the database So the DataSource property of the dropdownlist is set to BindTheDiscontinued() and OnPreRender property does the task of setting the value from the db to the dropdownlist <asp:DataGrid id=’DataGrid1′ AutoGenerateColumns=’False’ 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 VB.NET Dim strDiscontinued As String Dim obj As GetData Dim strSql As String Dim strConn As String Dim ds As DataSet Dim dr As SqlDataReader Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ’ Put user code to initialize the page here strConn = ‘server=localhost;uid=sa;pwd=;database=northwind’ If Not Page.IsPostBack Then BindGrid() End If End Sub ’Page_Load ’To Bind the DataGrid Sub BindGrid() obj = New GetData strSql = ‘Select productid, discontinued from Products’ ds = obj.GetDataFromTable(strSql, strConn) DataGrid1.DataSource = ds DataGrid1.DataBind() End Sub ’BindGrid ’To display Yes/No for True/False Protected Function ShowVal(ByVal blnval As Boolean) As String If blnval = True Then Return ‘Yes’ Else Return ‘No’ End If End Function ’ShowVal ’Bind the Data to the dropdownlist in the EditTemplate Protected Function BindTheDiscontinued() As SqlDataReader 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 End Function ’BindTheDiscontinued ’Set the Text of the Dropdownlist to the field value in Database Protected Sub SetDropDownIndex(ByVal sender As [Object], ByVal e As System.EventArgs) Dim ed As DropDownList ed = CType(sender, DropDownList) ed.SelectedIndex = ed.Items.IndexOf(ed.Items.FindByText(strDiscontinued)) End Sub ’SetDropDownIndex ’For Edit Update Cancel Public Sub DataGrid1_Edit(ByVal sender As [Object], ByVal e As DataGridCommandEventArgs) strDiscontinued = CType(e.Item.FindControl(‘lblDiscontinued’), Label).Text DataGrid1.EditItemIndex = CInt(e.Item.ItemIndex) BindGrid() End Sub ’DataGrid1_Edit Public Sub DataGrid1_Update(ByVal sender As [Object], ByVal e As DataGridCommandEventArgs) Dim TempList As DropDownList Dim TempValue As [String] TempList = CType(e.Item.FindControl(‘ddlDiscontinued’), DropDownList) TempValue = TempList.SelectedItem.Value ’Place update code here Response.Write(TempValue) DataGrid1.EditItemIndex = -1 BindGrid() End Sub ’DataGrid1_Update Public Sub DataGrid1_Cancel(ByVal sender As [Object], ByVal e As DataGridCommandEventArgs) DataGrid1.EditItemIndex = -1 BindGrid() End Sub ’DataGrid1_Cancel ’Functions used in Class GetData.cs Dim mycn As SqlConnection Dim myda As SqlDataAdapter Dim mycmd As SqlCommand Dim ds As DataSet Dim strConn As String Dim myReader As SqlDataReader Public Function GetDataFromTable(ByVal strSQL As String, ByVal strConnString As String) As DataSet Try strConn = strConnString mycn = New SqlConnection(strConn) myda = New SqlDataAdapter(strSQL, mycn) ds = New DataSet myda.Fill(ds, ‘Table’) Return ds Catch ex As Exception Throw New Exception(ex.Message.ToString()) Finally mycn.Close() End Try End Function ’GetDataFromTable Public Function GetSingleDataUsingReader(ByVal strSQL As String, ByVal strConnString As String) As SqlDataReader Try strConn = strConnString mycn = New SqlConnection(strConn) mycmd = New SqlCommand(strSQL, mycn) mycn.Open() myReader = mycmd.ExecuteReader(CommandBehavior.CloseConnection) Return myReader Catch ex As Exception Throw New Exception(ex.Message.ToString()) Finally End Try ’mycn.Close (); End Function ’GetSingleDataUsingReader C# 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 (); } }
How to display ‘No data’ when a field value is null
<asp:DataGrid id=’DataGrid1′ OnItemDataBound=ItemDB runat=’server’></asp:DataGrid> VB.NET Private Sub Page_Load(sender As Object, e As System.EventArgs) ’ Put user code to initialize the page here If Not Page.IsPostBack Then ’Populate the DataGrid End If End Sub ’Page_Load Protected Sub ItemDB(ByVal s As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then If e.Item.Cells(1).Text = ‘ ‘ Then e.Item.Cells(1).Text = ‘No data’ End If End If End Sub ’ItemDB C# private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here if(!Page.IsPostBack ) { //Populate the DataGrid } } protected void ItemDB (Object s , System.Web.UI.WebControls.DataGridItemEventArgs e ) { if ((e.Item.ItemType ==ListItemType.Item) ||(e.Item.ItemType ==ListItemType.AlternatingItem)) { if( e.Item.Cells[1].Text == ‘ ‘) { e.Item.Cells[1].Text = ‘No data’; } } } In Cells[x]/Cells(x) x=> index number
How to use a ButtonColumn in a DataGrid
<asp:DataGrid id=’DataGrid1′ OnItemCommand =’ItemCmd’ AutoGenerateColumns =False runat=’server’> <Columns> <asp:BoundColumn DataField=’ProductID’ HeaderText=’ProductID’></asp:BoundColumn> <asp:BoundColumn DataField=’Productname’ HeaderText=’Productname’></asp:BoundColumn> <asp:ButtonColumn DataTextField=’Productid’ CommandName=’Show’ HeaderText=’Productid’ ButtonType=’PushButton’ Text=’Click’></asp:ButtonColumn> </Columns> </asp:DataGrid> VB.NET Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ’Put user code to initialize the page here If Not Page.IsPostBack Then ’Populate the DataGrid End If End Sub Protected Sub ItemCmd(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) If e.CommandName = ‘Show’ Then Response.Write(e.Item.Cells(1).Text) End If End Sub C# private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here if (!Page.IsPostBack ) { //Populate the DataGrid } } protected void ItemCmd(Object source , System.Web.UI.WebControls.DataGridCommandEventArgs e ) { if (e.CommandName.ToString () == ‘Show’) { Response.Write(e.Item.Cells[1].Text); } }
How to change the value of a field before it gets displayed in the datagrid
<asp:DataGrid id=’DataGrid1′ OnItemDataBound=’ItemDB’ runat=’server’></asp:DataGrid> VB.NET Protected Sub ItemDB(ByVal s As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then Select Case Trim(e.Item.Cells(3).Text) Case ‘Sales Representative’ e.Item.Cells(3).Text = ‘SR’ Case ‘Vice President, Sales’ e.Item.Cells(3).Text = ‘VP’ Case ‘Sales Manager’ e.Item.Cells(3).Text = ‘SM’ Case ‘Inside Sales Coordinator’ e.Item.Cells(3).Text = ‘ISC’ Case Else e.Item.Cells(3).Text = e.Item.Cells(3).Text End Select end if end sub C# protected void ItemDB (Object s , System.Web.UI.WebControls.DataGridItemEventArgs e ) { if ((e.Item.ItemType ==ListItemType.Item) ||(e.Item.ItemType ==ListItemType.AlternatingItem)) { switch ( e.Item.Cells[3].Text.Trim() ) { case ‘Sales Representative’: e.Item.Cells[3].Text = ‘SR’; break; case ‘Vice President, Sales’: e.Item.Cells[3].Text = ‘VP’; break; case ‘Sales Manager’: e.Item.Cells[3].Text = ‘SM’; break; case ‘Inside Sales Coordinator’: e.Item.Cells[3].Text = ‘ISC’; break; default : e.Item.Cells[3].Text = e.Item.Cells[3].Text; break; } } }