2013-08-02 104 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(); 
相关问题