2013-06-12 14 views
1

我有一個GridView的數據。這個GridView的第一列是「SELECT」列。如何從ASP .NET中的GridVIew的SELECTED/HIGHLIGHTED行中提取特定值?

如果用戶點擊SELECT,它會突出顯示整行。

我對這個點擊操作的事件:

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

基本上我想要做的是爲每個所選行,我要提取值的列:

  • 數據源
  • 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. 
} 

誰能給我這個忙嗎?

回答

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); 
    } 

編輯:

我想補充一點,你可以使用的SelectedIndexChanged如果你不想使用SelectedIndexChanging:

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); 
    } 

如果你正在使用數據庫時,你可以將datakey添加到GridView,讓你拉你想要的工作記錄的主鍵。

以下內容添加到你的GridView:

DataKeyNames="showId" 

然後你就可以從代碼隱藏訪問該值:

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

我明天試試這個。謝謝! –

0

您需要依賴「選定/突出顯示」行的屬性。找到可以確定它是否爲選定行的任何屬性。

0

EventArgs e應該具有表示所選行的Row屬性。在那裏,你可以訪問每一列(稱爲單元格)。你使用索引進入每個特定的單元格。因此,如果ShowId在第3列中,您將如何訪問它:

e.Row.Cells[2];(請記住,它在C#中是基於0的索引)。

首先得到ShowId,試試e.Row.Cells[2].Text;這可能會得到你所需要的。

如果不行,試試這個:現在

,細胞內的[2],您可以訪問控制,而這又是在細胞控制列表。運行你的代碼,並在SelectedIndexChanged中放置一個斷點。然後在你的直接窗口中,鍵入上面的代碼,並將鼠標懸停在單元[2]上以打開那裏的項目。再次將鼠標懸停在控件上,然後查看內容。

通常有一個LiteralControl,然後用ShowId控制,然後是另一個LiteralControl。

驗證,然後你就可以像e.Row.Cells[2].Controls[1].Text或類似的東西訪問它。

+0

IM不理解這一點。如果我做e。只有少數物品出現。我不能做e.Row ... –

+0

好吧,我錯了,Row在其他GridView事件中像刪除等,而是使用gridview.SelectedRow。對於這種困惑感到抱歉。 –

相關問題