2017-07-04 62 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和它完美的作品。