in aspx page
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
onrowcommand="GridView1_RowCommand">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Add1" HeaderText="Add1" />
<asp:BoundField DataField="Add2" HeaderText="Add2" />
<asp:TemplateField>
<ItemTemplate>
<asp:Panel ID="pnlCustomer" runat="server">
<asp:TextBox runat="server" ID="txtCustName"></asp:TextBox>
</asp:Panel>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button text="click" runat="server" ID="b1" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
In codbehind page
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable("tblTest");
DataRow dr;
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Add1", typeof(string));
dt.Columns.Add("Add2", typeof(string));
dr = dt.NewRow();
dr["Name"] = "Neha";
dr["Add1"] = "Address1";
dr["Add2"] = "Add 2";
dt.Rows.Add(dr);
GridView1.DataSource = dt.DefaultView;
GridView1.DataBind();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer);
int index = row.RowIndex;
//((TextBox)GridView1.Rows[index].Cells[3].Controls[1])
string strName = ((TextBox)((Panel)GridView1.Rows[index].Cells[3].Controls[1]).Controls[1]).Text.ToString();
Response.Write(strName);
}
You can write the below code in case of "btnAddDetails_Click" but here u have to preserve index value.
protected void btnAddDetails_Click(object sender, EventArgs e)
{
string strName = ((TextBox)((Panel)GridView1.Rows[0].Cells[3].Controls[1]).Controls[1]).Text.ToString();
Response.Write(strName);
}
do Let me know if it worked