如何从GridVIew上的SELECTED/ highlight行提取特定值?

本文关键字:提取 highlight GridVIew 上的 SELECTED | 更新日期: 2023-09-27 18:18:02

我有一个GridView与数据。这个GridView的第一列是"SELECT"列。

如果用户单击SELECT,则突出显示整个行。

我有一个关于这个点击动作的事件:

protected void gvShows_SelectedIndexChanged(object sender, EventArgs e)
{
}

基本上我想做的是,对于每个SELECTED行,我想提取列的值:

  • 数据源
  • showId
  • episodeId

**这就是我遇到问题的地方:

string dataSource = "";
int showId = 0;
int episodeId = 0;
foreach (DataRow row in gvShows.Rows)
if (the row is selected/highlighted then...)
{
    dataSource = the value under column "dataSrouce" for this ROW.
    showId = the value under column "showId" for this ROW.
    episodeId = the value under column "episodeId" for this ROW.
}
谁能帮我一下这个?

如何从GridVIew上的SELECTED/ highlight行提取特定值?

我相信您会希望使用SelectedIndexChanging(而不是SelectedIndexChanged),因为这将使您能够访问新的选定行索引。如果第一个单元格是按钮,那么接下来的三个单元格应该提供您需要的值:

    protected void gvShows_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        GridViewRow r = gvShows.Rows[e.NewSelectedIndex];
        string dataSource = r.Cells[1].Text;
        int showId = Convert.ToInt32(r.Cells[2].Text);
        int episodeId = Convert.ToInt32(r.Cells[3].Text);
    }
编辑:

我想补充的是,如果你不想使用SelectedIndexChanging,你可以使用SelectedIndexChanged:

    protected void gvShows_SelectedIndexChanged(object sender, EventArgs e)
    {
        GridViewRow r = gvShows.Rows[gvShows.SelectedIndex];
        string dataSource = r.Cells[1].Text;
        int showId = Convert.ToInt32(r.Cells[2].Text);
        int episodeId = Convert.ToInt32(r.Cells[3].Text);
    }

如果你正在使用数据库,你可以添加一个数据键到gridview,允许你为你想要处理的记录拉主键。

将以下内容添加到gridview中:

DataKeyNames="showId"

然后你可以从后面的代码访问这个值:

int showId = Convert.ToInt32(gvShows.DataKeys[gvShows.SelectedIndex].Value);

您需要依赖"selected/highlight "行属性。查找任何可以确定它是否是选定行的属性。

EventArgs应该有一个Row属性来表示选中的行。在其中,您可以访问每个列(称为cell)。使用索引进入每个特定的单元格。所以,如果ShowId在第三列,你可以这样访问它:

e.Row.Cells[2];(记住,它在c#中是基于0的索引)。

首先得到ShowId,尝试e.Row.Cells[2].Text;,这可能会得到你需要的。

如果不成功,试试这个:

现在,在Cells[2]中,您可以访问Controls,这也是该单元格中的控件列表。运行您的代码,并在SelectedIndexChanged中放置一个断点。然后在当前窗口中,键入上面的代码,并将鼠标悬停在Cells[2]上,打开其中的项目。再次悬停在控件上,看看里面有什么

通常有一个LiteralControl,然后是ShowId控件,然后是另一个LiteralControl。

验证它,然后你就可以像e.Row.Cells[2].Controls[1].Text这样访问它了