如果我在gridview上有两个按钮,每个按钮执行不同的功能。例如我的代码,
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
//Do something else
}
else if (e.CommandName == "View Cert")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
errorlab.Text = row.Cells[3].Text;
}
}
单元格3的值是一个隐藏字段,数据库中有一个绑定到隐藏字段的值但是我的代码无法获取值。 errorlab标签没有显示任何内容。也许我错过了什么。
答案 0 :(得分:2)
我想建议一个答案,命令参数不会获取行索引。相反,它将为您提供在gridview数据绑定期间绑定的内容。
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
//Do something else
}
else if (e.CommandName == "View Cert")
{
//The hidden field id is hdnProgramId
HiddenField hdnProgramId = (((e.CommandSource as LinkButton).Parent.FindControl("hdnProgramId")) as HiddenField);
}
}
这将尝试从gridview行上下文中找到隐藏字段。
答案 1 :(得分:0)
如果gridview单元格上有更多控件,则必须使用Controls属性
访问它们 HiddenField hiddenField =row.Cells[3].Controls[0] as HiddenField;
if(hiddenField != null)
errorlab.Text = hiddenField.Value;
您必须为控件使用正确的索引。调试代码并检查row.Cells [3] .Controls。
中控件的位置答案 2 :(得分:0)
总是尽量避免在gridview中通过它的索引位置来引用单元格,因为如果您将来在网格中添加/删除更多列可能会导致意外结果,则可能会导致更改代码。另请注意,hiddenfield没有Text
属性,而是Value
属性可以访问它的值。
如果您知道隐藏字段的名称,那么最好尝试通过它的名称访问它。我们假设您在gridview中将隐藏字段定义如下
<ItemTemplate>
<asp:HiddenField ID ="hdnField" runat="server" Value='<%# Bind("ErrorLab") %>'/>
</ItemTemplate>
然后在GridView1_RowCommand
你可以做
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
HiddenField hdnField = (HiddenField)row.FindControl("hdnField");
errorlab.Text = hdnField.Value;