2017-07-04 36 views
1

我有可编辑的GridView一个简单的复选框:中恢复复选框当前值 - WebForm的C#

<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> 

当我行中点击编辑按钮,我想那个复选框已被选中,如果值是真的。 (IsEditable是一个布尔值) 文本字段很简单,因为我在EditItemTemplate的Text属性上有一个BindItem。但它不是为复选框或同一下拉列表

的GridView

enter image description here

我使用的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" 

我在哪里可以做到这一点? (我必须跟在下拉列表DATAS同样的问题。我不知道我在哪里编辑过程中恢复电流值)提前

感谢(对不起我对Web表单初学者和我的英语不是完美的)

小艾

回答

0

在编辑模板中使用下面的代码而不是为复选框声明

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

谢谢!这是一个好主意。我一直在寻找像这样的解决方案,直接在webform中。但我不希望默认值为true。我希望仅在我的数据库中的“IsEditable = true”时检查框。 – BoumBoumBam

+0

您可以在<%#Convert.ToBoolean(“true”)%> 中添加一个条件,它充当C#代码并用作行数据绑定事件并使用EVAL for datafeild来检查 –

+0

检查以下示例 ** < asp:Repeater ID =“ProductList”runat =“server”> <%#DataBinder.Eval(Container.DataItem,“Name”)%>仅用于<%#DataBinder.Eval(Container。DataItem的, “价格”, “{0:C}”)%>
See Details

** –

0
CheckBox chbx = GridView1.HeaderRow.FindControl("CheckBoxEditable") as CheckBox; 
    if (chbx != null && chbx.Checked)    
{ 
    //code here 
} 
else 
{ 
    //else condtion 
} 

希望这有助于

+1

谢谢,我认为这是一种更好的写作方式,但这不是解决我的问题的方法。我想我的checkBox已经检查,如果布尔值是真实的。 – BoumBoumBam

0

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

尝试在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 <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" >

+0

谢谢! :)这也是一个好主意。也许比aspx文件中的条件更清洁。但是我有System.ArgumentOutOfRangeException,索引超出了界限。我要去寻找解决方案 – BoumBoumBam

+0

@BoumBoumBam我编辑了我的答案尝试新的编辑代码 – AsifAli72090

0

我加了属性Checked=<%# BindItem.IsEditable %>上的CheckBox控件添加OnRowDataBound和它完美的作品。