Introduction
I receive many emails asking how we can access a particular control which resides inside a GridView
control. In this article I will show you how you can access different controls inside a GridView
control. We will see how we can access a TextBox
control, a DropDownList
control and a ListBox
control. If you are working with ASP.NET 1.X then you might want to check out my article Accessing Different Controls Inside a DataGrid.
Adding controls to the GridView control
You can add several controls to the GridView
control by simply using the <ItemTemplate>
option.
Populating ListBox and DropDownList
The next task is to populate the ListBox
and the DropDownList
control. Let's make a simple server side method that will populate both the ListBox
and the DropDownList
.
C# Code
public DataSet PopulateControls()
{
SqlConnection myConnection = new SqlConnection(GetConnectionString());
SqlDataAdapter ad = new SqlDataAdapter("SELECT [Name] FROM tblPerson",
myConnection);
DataSet ds = new DataSet();
ad.Fill(ds, "tblPerson");
return ds;
}
VB.NET Code
Public Function PopulateControls() As DataSet
Dim myConnection As SqlConnection = New SqlConnection(GetConnectionString())
Dim ad As SqlDataAdapter = New SqlDataAdapter("SELECT " & _
"[Name] FROM tblPerson",myConnection)
Dim ds As DataSet = New DataSet()
ad.Fill(ds, "tblPerson")
Return ds
End Function
Now we need to bind this method in the HTML view. Check out the code below for the DropDownList
, you can repeat the same procedure for the ListBox
control.
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" DataTextField="Name"
DataValueField = "Name" DataSource= '<%# PopulateControls() %>' runat="server">
</asp:DropDownList>
</ItemTemplate>
Now your DropDownList
and the ListBox
control are populated with some data. Now let's see how we can access different controls inside the GridView
.
Accessing different controls within the GridView control
On the Button
click event, we will try to print out the values that are either entered (TextBox
) or selected (DropDownList
and ListBox
). Let's see how this can be done.
C# Code
protected void Button1_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
string textBoxText = _
((TextBox)row.FindControl("TextBox1")).Text;
Response.Write(textBoxText);
string dropDownListText = ((DropDownList)
row.FindControl("DropDownList1")).SelectedItem.Value;
Response.Write(dropDownListText);
ListBox myListBox = (ListBox)row.FindControl("ListBox1");
foreach(ListItem selectedItem in myListBox.Items)
{
if (selectedItem.Selected)
{
Response.Write(selectedItem.Value);
}
}
}
VB.NET Code
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
For Each row As GridViewRow In GridView1.Rows
Dim textBoxText As String = _
CType(row.FindControl("TextBox1"),TextBox).Text
Response.Write(textBoxText)
Dim dropDownListText As String = _
CType(row.FindControl("DropDownList1"), _
DropDownList).SelectedItem.Value
Response.Write(dropDownListText)
Dim myListBox As ListBox = _
CType(row.FindControl("ListBox1"),ListBox)
For Each selectedItem As ListItem In myListBox.Items
If selectedItem.Selected Then
Response.Write(selectedItem.Value)
End If
Next
Next
End Sub
All we are doing in the code above is iterating through all the rows of the GridView
control using the GridViewRow
object. Next we find the control using the FindControl
method and prints out the control's value.
I hope you liked the article, happy coding!