2012-07-15 100 views
0

我有以下的數據庫設計:當複選框未選中時,如何在GridView中以灰色顯示該行?

Employee Table: Username, Name, JobTitle, BadgeNo, IsActive, DivisionCode 
Divisions Table: SapCode, DivisionShortcut 

我有,我用它來添加,刪除和更新/編輯員工信息的GridView控件。這些信息是員工用戶名,姓名,證件號,JobTitle,IsActive和DivisionShortcut。 IsActive是一個標誌,指示該員工是否可用或處於分配中。我把它作爲一個複選框,列應該顯示兩個值;有效和無效。在編輯模式下,將顯示覆選框。如果它被檢查,那麼這意味着員工是可用的,否則它是不活動的。

我寫了代碼,一切正常,但現在我只面臨一個問題,如下所示:當複選框未選中時,表示員工處於非活動狀態,所以我希望顯示其信息的行處於灰色(如禁用)。

那麼該怎麼做?

ASP.NET代碼:

<%-- GridView for User Management Subsystem --%> 
     <asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
      AutoGenerateColumns="False" DataKeyNames="Username" 
      DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound" BorderWidth="1px" BackColor="#DEBA84" 
      CellPadding="3" CellSpacing="2" BorderStyle="None" 
      BorderColor="#DEBA84"> 
      <FooterStyle ForeColor="#8C4510" 
       BackColor="#F7DFB5"></FooterStyle> 
      <PagerStyle ForeColor="#8C4510" 
       HorizontalAlign="Center"></PagerStyle> 
      <HeaderStyle ForeColor="White" Font-Bold="True" 
       BackColor="#A55129"></HeaderStyle> 
      <Columns> 
       <asp:CommandField ButtonType="Image" ShowEditButton="true" ShowCancelButton="true" 
           EditImageUrl="Images/icons/edit24.png" UpdateImageUrl="Images/icons/update24.png" 
           CancelImageUrl="Images/icons/cancel324.png" /> 

       <asp:TemplateField HeaderText="Division"> 
        <ItemTemplate> 
         <%# Eval("DivisionShortcut")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" 
              DataTextField="DivisionShortcut" DataValueField="SapCode" 
              SelectedValue='<%# Bind("DivisionCode")%>'> 
         </asp:DropDownList> 
        </EditItemTemplate> 
       </asp:TemplateField> 

       <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" 
        SortExpression="Username" /> 

       <asp:TemplateField HeaderText="Name"> 
        <ItemTemplate> 
         <%# Eval("Name")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> 
        </EditItemTemplate> 
       </asp:TemplateField> 

       <asp:TemplateField HeaderText="Job Title"> 
        <ItemTemplate> 
         <%# Eval("JobTitle")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> 
        </EditItemTemplate> 
       </asp:TemplateField> 

       <asp:TemplateField HeaderText="Badge No."> 
        <ItemTemplate> 
         <%# Eval("BadgeNo")%> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> 
        </EditItemTemplate> 
       </asp:TemplateField> 

       <asp:TemplateField HeaderText="Is Active?"> 
        <ItemTemplate> 
         <asp:Label ID="lblIsActive" runat="server" Text='<%# Eval("IsActive")%>'></asp:Label> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:CheckBox ID="isActive" runat="server" 
             AutoPostBack="true" OnCheckedChanged="isActive_OnCheckedChanged" 
             Checked='<%# Convert.ToBoolean(Eval("IsActive")) %>' 
             Text='<%# Eval("IsActive")%>'/> 
        </EditItemTemplate> 
       </asp:TemplateField> 

       <asp:TemplateField HeaderText="Delete?"> 
        <ItemTemplate> 
         <span onclick="return confirm('Are you sure to Delete the record?')"> 
          <asp:ImageButton ID="lnkB" runat="server" ImageUrl="Images/icons/delete24.png" CommandName="Delete" /> 
         </span> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

代碼隱藏:

//for updating the (IsActive) column using checkbox inside the GridView 
    protected void isActive_OnCheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox chkStatus = (CheckBox)sender; 
     GridViewRow gvrow = (GridViewRow)chkStatus.NamingContainer; 

     //Get the ID which is the NetworkID of the employee 
     string username = gvrow.Cells[2].Text; 
     bool status = chkStatus.Checked; 

     string connString = ConfigurationManager.ConnectionStrings["UsersInfoDBConnectionString"].ConnectionString; 
     SqlConnection conn = new SqlConnection(connString); 

     string updateIsActive = "UPDATE Employee SET IsActive = @IsActive WHERE Username = @Username"; 

     SqlCommand cmd = new SqlCommand(updateIsActive, conn); 

     cmd.Parameters.AddWithValue("@IsActive", status); 
     cmd.Parameters.AddWithValue("@Username", username); 

     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
     catch (SqlException se) 
     { 
      throw se; 
     } 
     finally 
     { 
      cmd.Dispose(); 
      conn.Close(); 
      conn.Dispose(); 
     } 
    } 

回答

0
在你上,你會設置的GrdiViewRow的背景色這樣 gvrow.BackColor= Color.Gray;

的複選框選中的狀態的方法

一個重要的想法是在第一次加載時,您需要重複GridView的OnRowDataBound的類似邏輯,以便將其移入方法和重用

protected void isActive_OnCheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox chkStatus = (CheckBox)sender; 
     GridViewRow gvrow = (GridViewRow)chkStatus.NamingContainer; 

     //Get the ID which is the NetworkID of the employee 
     string username = gvrow.Cells[2].Text; 
     bool status = chkStatus.Checked; 
if(!status)//this is checkbox is unchecked then set backcolor to Gray 
{ 
gvrow .BackColor = Color.Gray; 
} 

....... 
+0

我沒有得到你的意思。你能解釋更多嗎? – 2012-07-15 09:27:15

+0

請參閱更新回答我已爲您添加代碼 – HatSoft 2012-07-15 09:54:40

+0

它不起作用。爲什麼? 是因爲我已經在ASP.NET代碼中定義了GridView的BackColor,如上面我的代碼所示。 – 2012-07-15 09:59:03

0
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
if (e.Row.RowType == DataControlRowType.DataRow) 
{ 
    // First check Checkedbox is check or not, In Cells insert you IsActive column index 
    if(e.Row.Cells[1].Text == "False") 
     GridView1.BackColor = Color.Gray; 

} 
} 
+0

它不起作用。爲什麼? 是因爲我已經在ASP.NET代碼中定義了GridView的BackColor,如上面我的代碼所示。 – 2012-07-15 10:01:03

+0

可能會但是ID不這麼認爲?通過從gv中刪除來檢查它。 – 2012-07-15 11:55:20

相關問題