如何获取我用按钮单击的行
How do I get the row I clicked with a button
我有一个网格视图,当我单击按钮时,我想执行 SQL 命令以查看按下了哪个订单号。如何获取我点击的行?
asp
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="No_" AutoGenerateColumns="false" style="color:Black;border-collapse:collapse;margin-right: auto;display: table;text-align: center;" OnPageIndexChanging="MyGrid_PageIndexChanging" OnRowDataBound="MyGrid_RowDataBound" AllowPaging="True" PageSize="20" AllowCustomPaging="False" >
<Columns>
<asp:BoundField DataField="No_" HeaderText="No_Encomenda" />
<asp:BoundField DataField="[Item No_]" HeaderText="Item number" />
<asp:BoundField DataField="Quantity" HeaderText="Quantity" />
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerSettings Mode="NumericFirstLast" PageButtonCount="4" FirstPageText="First" LastPageText="Last"/>
<PagerStyle CssClass="gridview" HorizontalAlign="Center" VerticalAlign="Middle"/>
</asp:GridView>
cs
protected void ButtonDetails_Click(object sender, EventArgs e)
{
MyGrid.Visible = false;
GridView1.Visible = true;
}
网格视图图像:
嗯,首先,在您的标记中,我没有在您的标记中看到按钮。所以你的图片和标记不一致。
大约有 3 种通过按钮点击行的好方法。
最常见:
放入按钮。像这样说:
<asp:TemplateField HeaderText="View">
<ItemTemplate>
<asp:Button ID="cmdView" runat="server" Text="Details" CommandName="Select" />
</ItemTemplate>
</asp:TemplateField>
注意我们是如何添加 CommandName = "select" 的。这是一个特殊选项,将触发 Gridivew RowIndexed 更改。它还会触发行命令。但是,在行命令中,“selected 行事件”尚未触发。所以,我只是忽略行命令事件,并将您的代码放在 selected 索引更改事件中。
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",就会触发 SelectedinddexChanged 事件。
另一种方法是使用行命令(但您必须将行索引传递给该事件)。
但是,一个真正巧妙的方法是 100% 忽略网格事件,只使用您的按钮。
你可以这样做:
放入按钮。但是现在你不能双击按钮来连接点击事件,但是你仍然可以为点击设置事件。
在标记中,您可以输入 OnClick= 注意非常小心弹出的 intli-sense - 它看起来像这样:
所以在上面的选择中 - 选择创建新事件 - 它看起来好像什么都没发生,但是当你翻回 code-behind 时,你有一个很好的简单干净,很好的旧常规按钮点击事件。
放置一个按钮 - 创建点击事件。您现在可以 100% 忽略复杂的 GridView 事件(以及 select 命令等)。
你现在这样做:
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 我认为是一些细胞分隔器。事实上,我一直都在使用这个 .parent 技巧。因此按钮是放入网格标记中的简单按钮,我们使用标准按钮单击事件和代码方法。
但是,嘿,我们真的不关心 GridVieew 行命令,我们真的不关心 Selected 索引改变了。
我们有一个按钮点击。所以现在您可以使用这个巧妙的技巧来拯救世界贫困,使用复杂的 GridView 事件来拯救世界,并且只需像其他按钮一样编写一个简单的按钮。
我们通过这个技巧充分利用了网格视图行。
我有一个网格视图,当我单击按钮时,我想执行 SQL 命令以查看按下了哪个订单号。如何获取我点击的行?
asp
<asp:GridView ID="GridView1" runat="server"
DataKeyNames="No_" AutoGenerateColumns="false" style="color:Black;border-collapse:collapse;margin-right: auto;display: table;text-align: center;" OnPageIndexChanging="MyGrid_PageIndexChanging" OnRowDataBound="MyGrid_RowDataBound" AllowPaging="True" PageSize="20" AllowCustomPaging="False" >
<Columns>
<asp:BoundField DataField="No_" HeaderText="No_Encomenda" />
<asp:BoundField DataField="[Item No_]" HeaderText="Item number" />
<asp:BoundField DataField="Quantity" HeaderText="Quantity" />
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckedChanged" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerSettings Mode="NumericFirstLast" PageButtonCount="4" FirstPageText="First" LastPageText="Last"/>
<PagerStyle CssClass="gridview" HorizontalAlign="Center" VerticalAlign="Middle"/>
</asp:GridView>
cs
protected void ButtonDetails_Click(object sender, EventArgs e)
{
MyGrid.Visible = false;
GridView1.Visible = true;
}
网格视图图像:
嗯,首先,在您的标记中,我没有在您的标记中看到按钮。所以你的图片和标记不一致。
大约有 3 种通过按钮点击行的好方法。
最常见:
放入按钮。像这样说:
<asp:TemplateField HeaderText="View">
<ItemTemplate>
<asp:Button ID="cmdView" runat="server" Text="Details" CommandName="Select" />
</ItemTemplate>
</asp:TemplateField>
注意我们是如何添加 CommandName = "select" 的。这是一个特殊选项,将触发 Gridivew RowIndexed 更改。它还会触发行命令。但是,在行命令中,“selected 行事件”尚未触发。所以,我只是忽略行命令事件,并将您的代码放在 selected 索引更改事件中。
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",就会触发 SelectedinddexChanged 事件。
另一种方法是使用行命令(但您必须将行索引传递给该事件)。
但是,一个真正巧妙的方法是 100% 忽略网格事件,只使用您的按钮。
你可以这样做:
放入按钮。但是现在你不能双击按钮来连接点击事件,但是你仍然可以为点击设置事件。
在标记中,您可以输入 OnClick= 注意非常小心弹出的 intli-sense - 它看起来像这样:
所以在上面的选择中 - 选择创建新事件 - 它看起来好像什么都没发生,但是当你翻回 code-behind 时,你有一个很好的简单干净,很好的旧常规按钮点击事件。
放置一个按钮 - 创建点击事件。您现在可以 100% 忽略复杂的 GridView 事件(以及 select 命令等)。
你现在这样做:
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 我认为是一些细胞分隔器。事实上,我一直都在使用这个 .parent 技巧。因此按钮是放入网格标记中的简单按钮,我们使用标准按钮单击事件和代码方法。
但是,嘿,我们真的不关心 GridVieew 行命令,我们真的不关心 Selected 索引改变了。
我们有一个按钮点击。所以现在您可以使用这个巧妙的技巧来拯救世界贫困,使用复杂的 GridView 事件来拯救世界,并且只需像其他按钮一样编写一个简单的按钮。
我们通过这个技巧充分利用了网格视图行。