[英]gridview findcontrol returning nothing empty string(Blank)
我试图使用GridView1_RowEditing1事件从gridview选择行传递会话值。 我能够获取主键(p.key)的会话值,但是Associate_ID返回空。
后面的C#代码
protected void GridView1_RowEditing1(object sender, GridViewEditEventArgs e)
{
int primarykey = Convert.ToInt32(GridView1.DataKeys[e.NewEditIndex].Value);
string name = Convert.ToString(GridView1.Rows[e.NewEditIndex].FindControl("Associate_ID"));
Session["Number"] = primarykey;
Session["Name"] = name;
//redirect
Response.Redirect("updatee.aspx");
}
.ASPX
<asp:TemplateField HeaderText="Associate_ID" SortExpression="Associate_ID">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
输出:
关键点:5
名称:
如您所见,我没有为所选字段获取Associate_ID。 也尝试使用
string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("Associate_ID"));
但是没有结果,网格有多个列和行(8 * 15)
在gridview findcontrol上尝试返回空“”的建议,并尝试停止在PostBack上重新绑定GridView。 从gridview中删除了DataSourceID
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" OnRowEditing="GridView1_RowEditing1" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
背后的代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//DataSourceID = "SqlDataSource1"
GridView1.DataSource = SqlDataSource1;
GridView1.DataBind();
}
}
这些都没有帮助。 我仍然获得Associate_ID的空白值。 我看不到问题出在哪里。 请帮忙!
您试图找到带有FindControl的控件Associate_ID
。 但是它不存在。 找到TextBox1
或将TextBox重命名为Associate_ID
。
<EditItemTemplate>
<asp:TextBox ID="Associate_ID" runat="server" Text='<%# Bind("Associate_ID") %>'></asp:TextBox>
</EditItemTemplate>
//or
string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("TextBox1"));
更新
我看到了问题,以某种方式尝试通过重新绑定GridView激活编辑状态之前尝试访问这些控件。 尚未设置编辑索引。 因此,请将其放在FindControl之前。
GridView1.DataSource = yourSource;
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
非常感谢VDWWD,我终于能够使它工作。 问题是我无法使用FindControl在gridview中使用“ TextBox”元素。 解决方案是不要在页面的PostBack上重新绑定GridView,而在RowEditing事件上编辑索引。
这就是我的工作代码,任何人都遇到过类似的问题
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = SqlDataSource1;
GridView1.DataBind();
}
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.DataSource = SqlDataSource1;
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
TextBox txt = GridView1.Rows[e.NewEditIndex].FindControl("TextBox1") as TextBox;
string name = txt.Text;
}
.ASPX
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("CountryName") %>'></asp:TextBox>
</EditItemTemplate>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.