gpt4 book ai didi

c# - 单击 GridView 查找所选行

转载 作者:太空狗 更新时间:2023-10-29 21:27:56 24 4
gpt4 key购买 nike

我正在尝试获取 GridView 并从被单击的行中取回数据。我已经尝试了下面的代码,当我单击该行时,我得到了选定的索引,但是当我查看 GridView 中的实际行时,它们显示为空。不确定我错过了什么。

.ASP 制作我的网格。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" 
CssClass="datatables" Width="100%"
DataSourceID="SqlDataSource1"
GridLines="None" ShowFooter="True" AllowSorting="True"
onrowcreated="GridView1_RowCreated"
onrowdatabound="GridView1_RowDataBound" ShowHeaderWhenEmpty="True"
onrowcommand="GridView1_RowCommand"
onselectedindexchanged="GridView1_SelectedIndexChanged">
<HeaderStyle CssClass="hdrow" />
<RowStyle CssClass="datarow" />
<PagerStyle CssClass="cssPager" />
</asp:GridView>

在绑定(bind)的每一行数据上,我确保点击应该设置选定的索引。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(GridView1, "Select$" + e.Row.RowIndex);
}
}

然后,当通过单击更改选定的索引时,它会被触发,我可以在第一行放置一个断点,然后我会看到我单击的索引存储在 a 中。但是,当我到达 foreach 时,它会直接跳过它,因为它显示 GridView1 的计数为 0 行。理论上它应该有几百行,当索引匹配时它应该抓取第 6 个单元格中的数据并将其存储在字符串 b 中。为什么我在点击时没有得到任何行?

 protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int a = GridView1.SelectedIndex

foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowIndex == a)
{
b = row.Cells[6].Text;
}
}
}

这是我的页面加载。

protected void Page_Load(object sender, EventArgs e)
{
c = HttpContext.Current.Session["c"].ToString();
SqlDataSource1.ConnectionString = //My secret
string strSelect = "SELECT columnnames from tablenames where c in (@c)
SqlDataSource1.SelectParameters.Clear();
SqlDataSource1.SelectCommand = strSelect;
SqlDataSource1.SelectParameters.Add("c", c);
try
{
GridView1.DataBind();
}
catch (Exception e)
{

}
GridView1.AutoGenerateColumns = true;
}

最佳答案

尝试从 SelectedRow 属性中获取行:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
GridViewRow row = GridView1.SelectedRow;
string b = row.Cells[6].Text;
}

据我了解,当您使用这些数据源控件(如 SqlDataSource)时,Rows 集合不会在 PostBacks 上重新填充。

如果在尝试遍历行之前在 GridView 上调用 .DataBind(),则可能会使用现有代码:

GridView1.DataSourceID="SqlDataSource1";
GridView1.DataBind();

但这似乎有点老套。


看到您的 Page_Load 后,我发现您需要将数据绑定(bind)代码包装在 if(!Page.IsPostBack) block 中。每次回传上的数据绑定(bind)都会中断 ASP.NET 通过 ViewState 维护控件状态的过程。

关于c# - 单击 GridView 查找所选行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20982398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com