如何获取我用按钮单击的行

问题描述 投票:0回答:1
c# asp.net webforms
1个回答
1
投票

首先,在您的标记中,我在您的标记中没有看到按钮。因此,您拥有的图片和标记彼此不一致。

大约有 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 - 它看起来像这样:

enter image description here

所以在上面的选择中 - 选择创建新事件 - 看起来好像什么也没发生,但是当你翻转回代码隐藏时,你有一个很好的简单的按钮单击事件。

放下按钮 - 创建点击事件。您现在可以 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 事件,并且只需像任何其他按钮一样编写一个简单的按钮即可。

通过这个技巧,我们可以充分利用网格视图行。

© www.soinside.com 2019 - 2024. All rights reserved.