web-dev-qa-db-ja.com

GridViewEditTemplateでDropDownListのSelectedValueを設定する方法

私は先に尋ねたように this をしようとしています。私が見つけた唯一の違いは、上記のコードに含まれていた追加のリストアイテムです。

_AppendDataBoundItems=true_を使おうとしましたが、まだ機能しません。また、デフォルト値をitemtemplateのラベルに表示されていた値(DropDownListのSelectedValue='<%# Eval("DepartmentName") %>')に設定したいのですが、このプロパティはドロップダウンリストでは使用できません。その理由は何でしょうか。 ??

_<EditItemTemplate>
    <asp:DropDownList ID="ddlDepartment_Edit" runat="server" 
        DataSourceID="dsDepartment_Edit" DataTextField="DepartmentName" 
        DataValueField="PK_DepartmentId">
    </asp:DropDownList>
    <asp:SqlDataSource ID="dsDepartment_Edit" runat="server" 
        ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>"  
        ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" 
        SelectCommandType="StoredProcedure">
    </asp:SqlDataSource>                                 
</EditItemTemplate>
<ItemTemplate>
    <asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>' >
    </asp:Label>
</ItemTemplate>   
_

GridViewを使用しています

8
Shantanu Gupta

DataValueFieldは間違っているようです-DepartmentIdではないでしょうか?同様に、SelectedValue='<%# Eval("**DepartmentId**") %>' --DepartmentNameSeletectTextになります。

8
VinayC

GridView_DataBoundイベントハンドラーを使用すると、問題が解決します。

あなたの場合、PK_DepartmentId値を保存するためにHiddenFieldを追加する必要があります。

<asp:GridView ID="gvExample" runat="server" AutoGenerateColumns="False" OnDataBound="gvExample_DataBound">
  <Columns>
    <asp:TemplateField HeaderText="Department">
      <EditItemTemplate>
        <asp:DropDownList ID="ddlDepartment_Edit" runat="server" DataSourceID="dsDepartment_Edit"
          DataTextField="DepartmentName" DataValueField="PK_DepartmentId">
        </asp:DropDownList>
        <asp:HiddenField ID="hfDepartmentId" runat="server" Value='<%# Bind("PK_DepartmentId") %>' />
        <asp:SqlDataSource ID="dsDepartment_Edit" runat="server" ConnectionString="<%$ ConnectionStrings:BlackHillsConnect %>"
          ProviderName="System.Data.SqlClient" SelectCommand="sp_GetDepartmentDropDown" SelectCommandType="StoredProcedure">
        </asp:SqlDataSource>
      </EditItemTemplate>
      <ItemTemplate>
        <asp:Label ID="lblDepartmentName" runat="server" Text='<%# Eval("DepartmentName") %>'>
        </asp:Label>
      </ItemTemplate>
    </asp:TemplateField>
    <asp:CommandField ShowEditButton="True" ButtonType="Button" />
  </Columns>
</asp:GridView>

protected void gvExample_DataBound(object sender, EventArgs e)
{
  foreach (GridViewRow gvRow in gvExample.Rows)
  {
    DropDownList ddlDepartment = gvRow.FindControl("ddlDepartment_Edit") as DropDownList;
    HiddenField hfDepartmentId = gvRow.FindControl("hfDepartmentId") as HiddenField;

    if (ddlDepartment != null && hfDepartmentId != null)
    {
      ddlDepartment.SelectedValue = hfDepartmentId.Value;
    }
  }
}
3
SHS

行の条件が変化したときに特別に作成されたGridViewメソッドがあるのに、なぜループの使用を提案しているのですか?RowDataBound()

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            GridViewRow gvRow = (GridViewRow)e.Row;
            HiddenField hfAgentID = (HiddenField)gvRow.FindControl("hfAgentID");
            if (hfAgentID != null)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    DropDownList ddlAgent = (DropDownList)gvRow.FindControl("ddlAgent");
                    ddlAgent.SelectedValue = hfAgentID.Value;
                }
            }
        }
1
Fandango68

グリッドには、ItemCommandというイベントがあります。そのためのメソッドを作成します。

protected void Grid1_ItemCommand(object source, GridCommandEventArgs e)

次に、ユーザーがグリッドの編集ボタンをクリックしたことを認識するcaseステートメントを作成します。

 case Grid.EditCommandName:     
//set a member variable to the string of the cell you are editing.
//something like: mString = e.item..["Column"].toString();                  
                   break;

これで、ドロップダウンがロード/レンダリングされる前に、選択する文字列にメンバー変数が設定されました。 OnPrerenderにイベントOnLoadまたはdropdownboxを使用し、選択したアイテムをこの文字列に設定します。

0
giants_01

これは私が見つけた最高のものです....

protected void GridView1_DataBound(object sender, EventArgs e)
{
    foreach (GridViewRow gvRow in GridView1.Rows)
    {
        RadioButtonList rbl = gvRow.FindControl("rblPromptType") as RadioButtonList;
        HiddenField hf = gvRow.FindControl("hidPromptType") as HiddenField;

        if (rbl != null && hf != null)
        {
            if (hf.Value != "")
            {
                //clear the default selection if there is one
                rbl.ClearSelection();
            }

            rbl.SelectedValue = hf.Value;
        }
    }
}
0
Zach