2013-08-02 101 views
2

我用多個數據鍵綁定我的gridview。我試圖讓這些datakey值在選擇gridview的特定行時顯示在文本框中。所以我嘗試了下面的方法。foreach循環只顯示gridview的最後一個值

我設法根據列號將我的數據庫值存儲到一個字符串中。我正在使用foreach,以便在選擇特定行時循環整個gridview。但我不是很確定它爲什麼只顯示我的gridview的最後一個值?

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     foreach (GridViewRow gvr in GWCase.Rows) 
     { 
      string detail = GWCase.DataKeys[gvr.RowIndex].Values[0].ToString(); 
      string propertydetail = GWCase.DataKeys[gvr.RowIndex].Values[1].ToString(); 
      string suspectdetail = GWCase.DataKeys[gvr.RowIndex].Values[2].ToString(); 

      tbdetails.Text = detail; 
      tbproperty.Text = propertydetail; 
      tbsuspect.Text = suspectdetail; 
     } 

我真的不能轉換成適當的循環,因爲我也有gridview行。基本上,我試圖根據所選的gridview行顯示不同datakey的不同值。

+0

你真的需要什麼? – zxc

+0

讓我編輯我的問題。似乎不夠清楚。 –

回答

2

管理找出答案。

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int idx = GWCase.SelectedIndex; //add this line in 
    string detail = GWCase.DataKeys[idx].Values[0].ToString(); 
    string propertydetail = GWCase.DataKeys[idx].Values[1].ToString(); 
    string suspectdetail = GWCase.DataKeys[idx].Values[2].ToString(); 

    tbdetails.Text = detail; 
    tbproperty.Text = propertydetail; 
    tbsuspect.Text = suspectdetail; 
} 
2

嗯,我想你只想從選定的行的值。循環時,您不檢查行是否被選中。這就是爲什麼它只顯示最後一行的內容。嘗試以下操作:

protected void GWCase_SelectedIndexChanged(object sender, EventArgs e) 
{   
    GridViewRow selectedRow = GWCase.SelectedRow; 

    if(selectedRow == null) return; 

    /*GET VALUES FROM selectedRow AND DISPLAY THEM*/ 
} 
+0

我補充說,在foreach循環上面,但它仍然返回我從gridview的最後一行數據。 –

+0

和我selectedrow不會爲空。所有這些都充滿了。只是它只會將我的最後一行數據返回給我。 –

+0

如上所述,您不在'foreach'循環中檢查'SelectedRow'的值。因此,循環中的每次迭代都會更新這些'.Text'屬性,最終顯示給您的是循環中的最後一個值。 – ethorn10

2

回答你的問題:基本上,我試圖顯示出基於選定gridview的行不同datakey的不同價值。

要從選定行中獲取值,請使用GridView的DataKeyNames屬性。確保您有一個使用AutoGenerateSelectButton="true"的選擇按鈕或添加一個按鈕並將其CommandName屬性設置爲「Select」。

DataKeyNames屬性設置爲表格的主鍵。這也可以包含多個字段。

<asp:GridView ID="Employees" runat="server" DataSourceID="sourceEmployees" 
DataKeyNames="EmployeeID"> 

在你selectedIndexChanged事件,您可以訪問此PrimaryKey列的值以及其他列:

protected void gridEmployees_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    int index = gridEmployees.SelectedIndex; 

//retrieve the Primary Key field from the SelectedDataKey property. 
    int ID = (int)gridEmployees.SelectedDataKey.Values["EmployeeID"]; 

// Get other columns values 
string firstName = gridEmployees.SelectedRow.Cells[2].Text; 
string lastName = gridEmployees.SelectedRow.Cells[1].Text; 
lblRegion.Text = gridEmployees.SelectedRow.Cells[9].Text; 

} 

彼此的方式,你可以直接決定了數據的第一個關鍵領域的關鍵值通過使用SelectedValue屬性

// Returns only the value of First DataKey Field 
int ID = (int)gridEmployees.SelectedValue.ToString(); 
相關問題