【发布时间】:2016-08-21 17:52:25
【问题描述】:
我在模板字段中有一个带有命令按钮的网格视图。 在不先选择行的情况下,如何在命令按钮单击事件中获取第一个单元格值?
为了测试,我尝试设置标签文本值,但我认为由于没有先选择该行,所以它不起作用
Label3.Text = "test " + GridView1.SelectedRow.Cells[1].Text;
【问题讨论】:
我在模板字段中有一个带有命令按钮的网格视图。 在不先选择行的情况下,如何在命令按钮单击事件中获取第一个单元格值?
为了测试,我尝试设置标签文本值,但我认为由于没有先选择该行,所以它不起作用
Label3.Text = "test " + GridView1.SelectedRow.Cells[1].Text;
【问题讨论】:
您可以在按钮中将行号作为 CommandArgument 发送。
<asp:Button ID="Button1" CommandArgument='<%# Container.DataItemIndex %>' OnCommand="Button1_Command" runat="server" Text="Button" />
并从后面代码中的行和列中获取正确的值。
protected void Button1_Command(object sender, CommandEventArgs e)
{
Label3.Text = "test " + GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[1].Text;
}
正如稍后发现的,您需要将 GridView 的绑定包装到一个 !IsPostBack 中,否则您将收到“Invalid postback or callback argument”错误。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GridView1.DataSource = myDataSource;
GridView1.DataBind();
}
}
请注意,仅像这样 (Rows[0].Cells[1].Text) 搜索 GridView 单元格 适用于 BoundField 列,而不是 TemplateField 和 AutoGenerated 列。
【讨论】:
enableEventValidation=true 和 enableEventValidation=false 在页面指令中。
if (!Page.IsPostBack) { }。当我删除它时,我得到了同样的错误。我花了一段时间才弄清楚。其次,我忘了提到使用Cells[1].Text; 仅适用于boundfield,而不适用于模板。请参阅我对这个问题的回答 stackoverflow.com/questions/39008313/searching-a-nested-gridview-asp-net。