gridview findcontrol 什么都不返回空字符串(空白)
gridview findcontrol returning nothing empty string(Blank)
我正在尝试使用 GridView1_RowEditing1 事件从 gridview select 行传递会话值。我能够获取主键 (p.key) 的会话值,但 Associate_ID returns 为空。
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
姓名:
如您所见,我没有为 selected 字段获取 Associate_ID。
还尝试使用
string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("Associate_ID"));
但是没有结果,网格有多个列和行(8*15)
尝试了关于 gridview findcontrol returning empty "" 的建议并尝试停止在 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();
}
}
None 这有帮助。我仍然得到 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>
我正在尝试使用 GridView1_RowEditing1 事件从 gridview select 行传递会话值。我能够获取主键 (p.key) 的会话值,但 Associate_ID returns 为空。
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
姓名:
如您所见,我没有为 selected 字段获取 Associate_ID。 还尝试使用
string name = Convert.ToString(GridView1.Rows[3].Cells[3].FindControl("Associate_ID"));
但是没有结果,网格有多个列和行(8*15)
尝试了关于 gridview findcontrol returning empty "" 的建议并尝试停止在 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();
}
}
None 这有帮助。我仍然得到 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>