2

データベースの更新に使用しているグリッドビューがあります。グリッドビューは 3 つの列で構成されています。最初の列は ID 番号です。2 番目の列はカテゴリ (BU) です。最後の列はコメント フィールドです。2 番目と 3 番目の列を編集できるように編集を設定しました。2 番目の列には、ユーザーが選択できるドロップダウン リストが必要です。ここまでは絶好調です。私のクライアントはこれに別のグループを追加したので、顧客が顧客 A か顧客 B かを調べるために、ドロップダウン リストに入力するクエリを変更する必要があります。データベースのビューに基づいてドロップダウン リストを作成しています。このビューには、Cust、BU という 2 つの列があります。グリッドビューに入力する元のクエリからカスタムを取得できます。DataKey として設定しようとしましたが、参照方法がわかりません。

これは、グリッドビューのドロップダウン リストのコードです。onrowdatabound = "Rowdatabound" を使用して、オブジェクトをグリッドビューに関連付けます。

以下は、rowdatabound のコード ビハインドです。

protected void RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && gvSummary.EditIndex == e.Row.RowIndex)
    {

        DropDownList dlBU = (DropDownList)e.Row.FindControl("dlBU");

        string query = "select distinct Unit from vw_BU";
        SqlCommand cmd = new SqlCommand(query);
        dlBU.DataSource = GetData(cmd);
        dlBU.DataTextField = "Unit";
        dlBU.DataValueField = "Unit";
        dlBU.DataBind();
        dlBU.Items.FindByValue((e.Row.FindControl("lblBU") as Label).Text).Selected = true;
    }
}

lblBU は、ドロップダウンリストが元の値を保持するようにするためのものです。顧客ごとに null 値をデータベースに追加して、値が入力されていない場合にエラーを回避できるようにしました。

したがって、最終的に私がやりたいことは、vw_BU とは異なるユニットを選択することです。ここで、cust = "Tim" であり、元の select ステートメントの datakey から Tim を取得します。

これが理にかなっていることを願っています。

4

1 に答える 1

2

注:チェックGridView.EditIndexインOnRowCommandの値は常に -1 であるため、チェックインgvSummary.EditIndex==e.Row.RowIndexは決してtrue.

OnRowEditingOnRowCommand ではなく、グリッドビューのイベントにコードを配置する必要があります。DataKeyNamesグリッドビューのプロパティを設定することから始めます。

<asp:GridView ID="gvSummary" DataKeyNames="Cust" ... />

イベントでは、編集する行のこの値にOnRowEditingアクセスできます。Cust

<asp:GridView ID="gvSummary" DataKeyNames="Cust" 
     OnRowEditing="gvSummary_RowEditing"  ... />

// そしてあなたのコードビハインドには..

protected void gvSummary_RowEditing(object sender, GridViewEditEventArgs e)
{

        // Get the Cust column value 
        string _custName= gvSummary.DataKeys[e.NewEditIndex].Value.ToString();
        // get the value without using DataKeys as:
        string _custName2= gvSummary.Rows[e.NewEditIndex].Cells[2].Text;
       // frame your query now::
       string query = "select distinct Unit from vw_BU where Cust='"+_custName+"'"; 

       // rest of your code to bind dropdownlist  

}

編集:: DataKeys として複数の列を設定した場合は、次のように値にアクセスできます。

 // using Names
    string str = gvSummary.DataKeys[e.NewEditIndex].Values["Cust"].ToString();
    // using index
    string str = gvSummary.DataKeys[e.NewEditIndex].Values[2].ToString();
于 2013-09-03T15:44:54.310 に答える