首先,在您的标记中,我在您的标记中没有看到按钮。因此,您拥有的图片和标记彼此不一致。
大约有 3 种很棒的方法可以通过按钮单击行。
最常见:
放入按钮。像这样说:
<asp:TemplateField HeaderText="View">
<ItemTemplate>
<asp:Button ID="cmdView" runat="server" Text="Details" CommandName="Select" />
</ItemTemplate>
</asp:TemplateField>
注意我们如何添加 CommandName =“select”。这是一个特殊选项,将触发 Gridivew RowIndexed 更改。它还触发行命令。但是,在行命令中,“选定行事件”尚未触发。所以,我只是忽略行命令事件,并将您的代码放入选定的索引更改事件中。
protected void MyGrid_SelectedIndexChanged(object sender, EventArgs e)
{
// Get selected row
GridViewRow dG = MyGrid.SelectedRow;
Response.Write("Row index was " + dG.RowIndex.ToString());
// get non templated columns - they appear in cells
Response.Write("2nd colum value = " + dG.Cells[1].Text);
// get templated fields - say a combo box for city
DropDownList CityComboBox = (DropDownList)dG.FindControl("DropDownList1");
Response.Write("City selected from combo box = " + CityComboBox.SelectedValue);
}
因此,只需添加 CommandName = "Select",就会触发 SelectedIndexChanged 事件。
另一种方法是使用 row 命令(但您必须将行索引传递给该事件)。
但是,一个真正巧妙的方法是 100% 忽略网格事件,只使用按钮。
你可以这样做:
放入按钮。但现在你不能双击按钮来连接点击事件,但你仍然可以设置点击事件。
在标记中,您可以输入
OnClick=
,请非常仔细地注意弹出的 IntelliSense - 它看起来像这样:
所以在上面的选择中 - 选择创建新事件 - 看起来好像什么也没发生,但是当你翻转回代码隐藏时,你有一个很好的简单的按钮单击事件。
放下按钮 - 创建点击事件。您现在可以 100% 忽略复杂的 GridView 事件(以及选择命令等)。
你现在这样做:
protected void Button3_Click(object sender, EventArgs e)
{
Button MyButton = (Button)sender;
GridViewRow dG = (GridViewRow)MyButton.Parent.Parent;
Response.Write("Row index was " + dG.RowIndex.ToString());
// get non templated columns - they appear in cells
Response.Write("2nd colum value = " + dG.Cells[1].Text);
// get templated fields - say a combo box for city
DropDownList CityComboBox = (DropDownList)dG.FindControl("DropDownList1");
Response.Write("City selected from combo box = " + CityComboBox.SelectedValue);
}
我发现上述的麻烦更少,而且使用起来也更少的学习曲线。我们放入一个按钮 - 单击事件。您只需将“发送者”放入按钮中,然后获取parent.parent,这就是我们想要的网格行。
第一个父母我认为是一些细胞分裂者。事实上,我一直在使用这个 .parent 技巧。因此,按钮是一个放入网格标记中的简单按钮,我们使用标准按钮单击事件和代码方法。
但是,嘿,我们真的不关心 GridView 行命令,而且我们真的不关心 Selected 索引的更改。
我们有一个按钮点击。因此,现在您可以使用这个巧妙的技巧来保存复杂的 GridView 事件,并且只需像任何其他按钮一样编写一个简单的按钮即可。
通过这个技巧,我们可以充分利用网格视图行。