How to set SelectedValue of DropDownList in GridView EditTemplate

后端 未结 5 996
被撕碎了的回忆
被撕碎了的回忆 2021-01-04 20:36

I am trying to do this as asked earlier. The only difference that I found is additional List item that was included in above code.

I tried to use AppendDataBou

相关标签:
5条回答
  • 2021-01-04 20:56

    The use of the GridView_DataBound event handler solves the problem.

    In your case you will need to add a HiddenField to store the PK_DepartmentId value:

    <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;
        }
      }
    }
    
    0 讨论(0)
  • 2021-01-04 20:56

    On your grid there is an event called ItemCommand. Create a method for it:

    protected void Grid1_ItemCommand(object source, GridCommandEventArgs e)
    

    Now simply create a case statement that will recognize when the user has clicked the edit button on the grid:

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

    Now you have a member variable set to the string you want to be selected before the dropdown is even loaded/prerendered. Use the event OnPrerender or OnLoad for the dropdownbox and set the selected item to this String.

    0 讨论(0)
  • 2021-01-04 21:02

    Why are you guys suggesting to use loops, when there is a GridView method specifically made for when a row's condition changes - the 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;
                    }
                }
            }
    
    0 讨论(0)
  • 2021-01-04 21:02

    This is the best i have found....

    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 讨论(0)
  • 2021-01-04 21:13

    DataValueField seems to be wrong - shouldn't it be DepartmentId? Similarly, you need to have SelectedValue='<%# Eval("**DepartmentId**") %>' - DepartmentName would be the SeletectText.

    0 讨论(0)
提交回复
热议问题