1

我有一个带有数据的 GridView。此 GridView 的第一列是“SELECT”列。

如果用户单击 SELECT,它将突出显示整行。

我对此点击操作有一个事件:

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

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

  • 数据源
  • 节目编号
  • 剧集编号

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

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.
}

任何人都可以帮我解决这个问题吗?

4

3 回答 3

2

我相信您会想要使用 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 添加一个数据键,允许您为要处理的记录提取主键。

将以下内容添加到您的网格视图中:

DataKeyNames="showId"

然后您可以从代码隐藏中访问此值:

int showId = Convert.ToInt32(gvShows.DataKeys[gvShows.SelectedIndex].Value);
于 2013-06-13T00:50:26.863 回答
0

您需要依赖“选定/突出显示”行的属性。查找任何可以确定它是否是选定行的属性。

于 2013-06-12T22:41:02.300 回答
0

EventArgs e 应该有一个表示所选行的 Row 属性。在那里,您可以访问每一列(称为单元格)。您可以使用索引进入每个特定的单元格。因此,如果 ShowId 在第 3 列中,您可以通过以下方式访问它:

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或类似的东西访问它。

于 2013-06-12T22:46:13.667 回答