2014-02-06 4 views
1

У меня есть сетка, где я использую флажок, чтобы редактировать строки сетки. На флажке щелкните, как я могу сохранить выпадающие значения?Сохранять выпадающие значения в gridview

<Columns> 
<asp:TemplateField> 
    <HeaderTemplate> 
     <asp:CheckBox ID="chkAll" runat="server" AutoPostBack="true"  OnCheckedChanged="OnCheckedChanged" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="OnCheckedChanged" /> 
    </ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Scope"> 
    <HeaderStyle HorizontalAlign="Center" Wrap="False" CssClass="header"> 
    </HeaderStyle> 
    <ItemTemplate> 
     <asp:Label ID="lblScope" runat="server" Text='<%# Bind("Scope") %>'></asp:Label> 
     <asp:DropDownList ID="ddlCMS" Visible="false" runat="server"> 
       <asp:ListItem>Yes</asp:ListItem> 
       <asp:ListItem>No</asp:ListItem> 
     </asp:DropDownList> 
    </ItemTemplate> 
    <ItemStyle Wrap="false" CssClass="header" /> 
    </asp:TemplateField> 
</Columns> 

Я использую этот ниже код, чтобы проверить и снять отметки с строк сетки для редактирования. Поэтому, когда я нажимаю на флажок, я не могу продавать выбранные выпадающие значения gridview. Например: Третья строка, имеющая столбец с именем scope, имеет выбранное значение. Но когда я нажимаю на флажок, значения имеют значение Да, так как это порядок, который я привязал в раскрывающемся списке.

protected void OnCheckedChanged(object sender, EventArgs e) 
    { 
     bool isUpdateVisible = false; 
     CheckBox chk = (sender as CheckBox); 
     if (chk.ID == "chkAll") 
     { 
      foreach (GridViewRow row in Updates.Rows) 
      { 
       if (row.RowType == DataControlRowType.DataRow) 
       { 
        row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked = chk.Checked; 
       } 
      } 
     } 
     CheckBox chkAll = (Updates.HeaderRow.FindControl("chkAll") as CheckBox); 
     chkAll.Checked = true; 
     foreach (GridViewRow row in Updates.Rows) 
     { 
      if (row.RowType == DataControlRowType.DataRow) 
      { 
       bool isChecked = row.Cells[0].Controls.OfType<CheckBox>().FirstOrDefault().Checked; 
       for (int i = 1; i < row.Cells.Count; i++) 
       { 
        if (row.Cells[i].Controls.OfType<Label>().ToList().Count > 0) 
        { 
         row.Cells[i].Controls.OfType<Label>().FirstOrDefault().Visible = !isChecked; 
        } 
        if (row.Cells[i].Controls.OfType<TextBox>().ToList().Count > 0) 
        { 
         row.Cells[i].Controls.OfType<TextBox>().FirstOrDefault().Visible = isChecked; 
        } 
        if (row.Cells[i].Controls.OfType<DropDownList>().ToList().Count > 0) 
        { 
         row.Cells[i].Controls.OfType<DropDownList>().FirstOrDefault().Visible = isChecked; 
        } 
        if (isChecked && !isUpdateVisible) 
        { 
         isUpdateVisible = true; 
        } 
        if (!isChecked) 
        { 
         chkAll.Checked = false; 
        } 
       } 
      } 
     } 
     btnSave.Visible = isUpdateVisible; 
    } 

ответ

0

Сначала нужно создать функцию, как это

private DataSet GetData(string query) 
{ 
    string conString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlCommand cmd = new SqlCommand(query); 
    using (SqlConnection con = new SqlConnection(conString)) 
    { 
     using (SqlDataAdapter da = new SqlDataAdapter()) 
     { 
      cmd.Connection = con; 
      da.SelectCommand = cmd; 
      using (DataSet ds = new DataSet()) 
      { 
       da.Fill(ds); 
       return ds; 
      } 
     } 
    } 
} 

и GridView RowDataBound

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //Find the DropDownList in the Row 
     DropDownList ddlRole = (e.Row.FindControl("ddlRole") as DropDownList); 
     ddlRole.DataSource = GetData("SELECT RoleType FROM TableName"); 
     ddlRole.DataTextField = "RoleType"; 
     ddlRole.DataValueField = "RoleType"; 
     ddlRole.DataBind(); 

     //Add Default Item in the DropDownList 
     ddlRole.Items.Insert(0, new ListItem("Please select")); 

     //Select the role of user in DropDownList 
     string role = (e.Row.FindControl("lblRole") as Label).Text; 
     ddlRole.Items.FindByValue(role).Selected = true; 
    }  
} 

нормально может быть, вы можете попробовать ViewState для этого им не уверен, может быть это ссылка поможет

This

Here

+0

Я не собираюсь вытаскивать значения из БД. Я сильно кодирую выпадающие значения. – Learner

Смежные вопросы