2

グリッドビューを複数のデータキーにバインドしています。グリッドビューの特定の行が選択されているときに、これらのデータキーの値をテキストボックスに表示しようとしています。そのため、以下の方法を試しました。

列番号に基づいて、データベースの値を文字列に格納することができました。特定の行が選択されているときにグリッドビュー全体をループするために、foreach を使用しています。しかし、なぜ 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;
        }

グリッドビューの行も取得したため、適切な for ループに実際に変換することはできません。基本的に、選択したグリッドビュー行に基づいて、異なるデータキーの異なる値を表示しようとしています。

4

3 に答える 3

2

あなたの質問への回答:基本的に、選択したグリッドビュー行に基づいて、異なるデータキーの異なる値を表示しようとしています。

選択した行から値を取得するにはDataKeyNames、GridView のプロパティを使用します。AutoGenerateSelectButton="true"またはボタンの追加を使用して selectbutton が存在することを確認し、その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;

}

選択した行の最初のキー フィールドのデータ キー値を直接決定するもう 1 つの方法は、SelectedValue プロパティを使用することです。

// Returns only the value of First DataKey Field
int ID = (int)gridEmployees.SelectedValue.ToString(); 
于 2013-08-02T04:03:24.190 に答える
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;
}
于 2013-08-02T05:42:37.027 に答える
2

選択した行のみから値が必要だと思います。ループ中は、行が選択されているかどうかを確認していません。そのため、最後の行のもののみが表示されます。以下を試してください:

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

    if(selectedRow == null) return;

    /*GET VALUES FROM selectedRow AND DISPLAY THEM*/
}
于 2013-08-02T02:35:53.047 に答える