【问题标题】:Recover current value in checkBox during gridView Editing - WebForm C#在gridView编辑期间恢复checkBox中的当前值 - WebForm C#
【发布时间】:2017-12-07 18:26:42
【问题描述】:

我在 Editable gridView 中有一个简单的复选框:

<asp:TemplateField HeaderText="Editable">
  <ItemTemplate>
      <asp:Label runat="server" Text="<%# Item.IsEditable %>" />
  </ItemTemplate>
  <EditItemTemplate>
      <asp:CheckBox ID="CheckBoxEditable " runat="server" Text="Editable"></asp:CheckBox>
  </EditItemTemplate>
</asp:TemplateField>

当我单击该行中的编辑按钮时,如果值为 true,我希望复选框已被选中。 (IsEditable 是一个布尔值) 文本字段很简单,因为我在 EditItemTemplate 中的 Text 属性上有一个 BindItem。但是checkBox或者dropdownlist就不一样了

网格视图

我使用 UpdateItem 方法来更新数据库中的数据。我尝试了一个小条件来检查我的复选框,但它不起作用。

public void GridViewRisquesAggravants_UpdateItem(IndexViewModel item)
{
 try
   {
    if (ModelState.IsValid)
      {
       CheckBox chbEdit = (CheckBox)GridView.Rows[this.GridView.EditIndex].FindControl("CheckBoxEditable") 
          if (item.IsEditable)
              chbEdit.Checked = true;

        new TypeService().Update(new Type
        {   
          IsEditable = item.IsEditable, 
        });
        this.GridView.DataBind();
      }
    }
    catch
    {
      throw;
    }
}

这是有道理的,因为我没有在正确的函数中声明它。但我的网络表单中只有 3 个方法。

SelectMethod="GridView_GetData"
UpdateMethod="GridView_UpdateItem"
DeleteMethod="GridView_DeleteItem"

我在哪里可以做到这一点? (而且我对 dropdownList 上的数据也有同样的问题。我不知道在编辑过程中我在哪里恢复当前值)

提前致谢 (对不起,我是网络表单的初学者,我的英语不是很完美)

艾薇

【问题讨论】:

    标签: c# asp.net gridview checkbox webforms


    【解决方案1】:

    使用以下代码代替编辑模板中的复选框声明

     <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Convert.ToBoolean("true") %>' />
    

    【讨论】:

    • 谢谢!这是个好主意。我一直在寻找这样的解决方案,直接在网络表单中。但我不希望默认值为 true。我希望仅当我的数据库中的“IsEditable = true”时才选中该框。
    • 您可以在 中添加一个条件,这充当 C# 代码并用作行数据绑定事件,并使用 EVAL 对数据字段进行检查
    • 检查以下示例 仅适用于
      查看详情

    【解决方案2】:
    CheckBox chbx = GridView1.HeaderRow.FindControl("CheckBoxEditable") as CheckBox;
      if (chbx != null && chbx.Checked)            
    {
      //code here
    }
    else 
    {
      //else condtion
    }
    

    希望对你有帮助

    【讨论】:

    • 谢谢,我接受它是因为它是一种更好的编写方式,但它不能解决我的问题。我希望我的复选框已经检查过布尔值是否为真。
    【解决方案3】:

    我在哪里可以做到这一点?

    RowDataBound 活动中尝试一下:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chbEdit = (CheckBox)e.Row.FindControl("CheckBoxEditable");
    
            string value = ((Label)e.Row.FindControl("lblID")).Text;
            if (value=="True")
                chbEdit.Checked = true;
            else
                chbEdit.Checked = false;
        }
    }
    

    注意:不要忘记在 GrindView 中添加 OnRowDataBound &lt;asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" &gt;

    【讨论】:

    • 谢谢! :) 这也是一个好主意。也许比 aspx 文件中的条件更干净。但我有 System.ArgumentOutOfRangeException,索引超出范围。我正在寻找解决方案
    【解决方案4】:

    我在 CheckBox Control 上添加了属性Checked=&lt;%# BindItem.IsEditable %&gt;,它运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 2011-09-25
      • 2015-01-26
      相关资源
      最近更新 更多