2013-06-28 121 views
0

我有一個包含CheckBox控件的列的ASP GridView。這些CheckBox綁定到一個通過SqlDataSource訪問的位域。 GridView是可編輯的,CheckBoxes在加載時被禁用。 我正在嘗試在編輯期間將啓用的屬性更改爲true,因此正在編輯的行中的CheckBox可以更改,並且此更改會更新爲數據庫中的位字段。GridView複選框 - 無法更改屬性

ASP代碼

  <asp:UpdatePanel ID="upGridView" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 
      <asp:GridView ID="gvChecklist" runat="server" 
        AutoGenerateColumns="false" DataSourceID="dsChecklist" 
        AutoGenerateEditButton="true" onrowupdating="gvChecklist_RowUpdating" 
        onrowediting="gvChecklist_RowEditing"> 
       <Columns> 
        <asp:TemplateField HeaderText="Finished"> 
         <ItemTemplate><asp:CheckBox ID="cbFinished" runat="server" Enabled="false" Checked='<%# Eval("Finished") ?? false %>' /> </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="Division" 
          HeaderText="Division" 
          readonly="true" /> 
        <asp:BoundField DataField="Application" 
          HeaderText="Application" 
          readonly="true" /> 
        <asp:BoundField DataField="Task" 
          HeaderText="Task" 
          readonly="true" /> 
        <asp:BoundField DataField="TestedBy" HeaderText="Tested By" readonly="true"/> 
        <asp:BoundField DataField="Notes" HeaderText="Notes" ReadOnly="false"/> 
        <asp:BoundField DataField="JiraTicket" 
          HeaderText="JIRA Ticket" 
          readonly="false" /> 
       </Columns> 
      </asp:GridView> 
      </ContentTemplate> 
      </asp:UpdatePanel> 

C#代碼背後的RowEditing事件

protected void gvChecklist_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    GridView gvChecklist = (GridView)LoginView1.FindControl("gvChecklist"); 
    CheckBox cb = (CheckBox)gvChecklist.Rows[e.NewEditIndex].Cells[1].FindControl("cbFinished"); 

    cb.Enabled = true; 
    gvChecklist.DataBind(); 
} 

-edit:我覺得有必要在這裏補充一點的更多信息。將CheckBox cb設置爲GridView Row的CheckBox的代碼似乎正常工作,因爲我可以通過調試器看到啓用的屬性= true。我想知道在這個事件運行後它是否由於PostBack而返回false。這個頁面的Load方法是空的,但我認爲在ASP頁面中打開了enabled = false代碼。的GridView enter image description here

+0

在標記中,您有複選框'Enabled =「false」'。你爲什麼明確這樣設置? –

+0

因爲我不希望在單擊編輯按鈕之前啓用複選框。 – Andrew

+0

如果加載方法爲空,GV會被綁定在哪裏?嘗試設置複選框的可見性並查看它是否消失/在預期時重新出現。 –

回答

0

UI對此的解決方案是令人驚訝地簡單。我沒有將一個CheckBox放到TemplateField中,而是爲CheckBox列設置了一個DataField屬性。這允許編輯功能不需要進一步的C#代碼。

<asp:CheckBoxField DataField="Finished" 
    HeaderText="Finished" 
    readonly="false" />