2011-01-10 236 views
0

所有的新年快樂。我是VB.NET和ASP.NET的新手。這是我的問題:複選框列表

我從DB中檢索記錄列表,並且對於每一行,我需要顯示4個複選框。我可以爲每一行使用一個checkboxlist,但是如何在提交後處理結果並不那麼清楚。

我有一些對象和一些操作可用於該對象。從數據庫中,我提取所有操作的對象列表。對於每個操作,我想顯示一個複選框以啓用或禁用該操作。結果是這樣的:

OBJ1 - url - [] [x] [] 

OBJ2 - url - [] [x] [x] 

關於網址我有一個href到使用從數據庫檢索到的Id創建的另一個頁面。要創建我使用此代碼:

<td class="column-filename"> 
    <strong> 
     <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "GroupName")%>'></asp:Label> 
    </strong>      
</td>  
<td align="left"> 
    <span style="vertical-align:middle"> 
    <asp:CheckBoxList runat="server" ID="operations" RepeatDirection="Horizontal" RepeatLayout="Table"> 
     <asp:ListItem Text="View"></asp:ListItem> 
     <asp:ListItem Text="Upload"></asp:ListItem> 
     <asp:ListItem Text="Move"></asp:ListItem> 
     <asp:ListItem Text="Delete"></asp:ListItem> 
     <asp:ListItem Text="Rename"></asp:ListItem> 
     <asp:ListItem Text="Replace"></asp:ListItem> 
    </asp:CheckBoxList> 
    </span> 
</td> 
</asp> 
      </asp> 

我的問題是:如何解析所有複選框?

你能幫我或給我一個鏈接或任何其他資源來解決我的問題?

非常感謝! Andrea

回答

0

現在它正常工作。這是我的解決方案(我將它張貼在這裏,因爲我敢肯定,下個月我將有同樣的問題....)

<asp:DataGrid ID="GroupList" Runat="server" CssClass="widefat" 
      AutoGenerateColumns="False" 
      BorderColor="#999999" 
      BorderStyle="None" 
      BorderWidth="1px" 
      BackColor="White" 
      CellPadding="3" 
      GridLines="Vertical"> 
     <Columns>   
      <asp:BoundColumn HeaderText="Status" DataField="GroupName" /> 
      <asp:BoundColumn HeaderText="Status" DataField="GroupActive" /> 
      <asp:BoundColumn HeaderText="Status" DataField="GroupID" 
        Visible="false" /> 
      <asp:TemplateColumn HeaderText="Users" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:HyperLink runat="server" 
        NavigateUrl="User_manager.aspx" > 
        <asp:Image runat="server" 
        ImageUrl="~/images/folders/users.png" 
        Width="24" /></asp:HyperLink> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="View" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkView" Runat="server" 
        Checked='<%# Eval("View").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Upload" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkUpload" Runat="server" 
        Checked='<%# Eval("Upload").ToString().Equals("1")%>'/> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Delete" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkDelete" Runat="server" 
        Checked='<%# Eval("Delete").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Move" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkMove" Runat="server" 
        Checked='<%# Eval("Move").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Rename" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkRename" Runat="server" 
        Checked='<%# Eval("Rename").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Replace" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkReplace" Runat="server" 
        Checked='<%# Eval("Replace").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
     </Columns> 
     <AlternatingItemStyle BackColor="#f9f9f9" /> 
     <ItemStyle ForeColor="Black" BackColor="#EEEEEE" BorderStyle="Solid" 
        BorderColor="#dfdfdf" BorderWidth="1px" /> 
     <headerStyle Font-Bold="True" ForeColor="Black" BackColor="#dfdfdf" 
        HorizontalAlign="Center" /> 
    </asp:DataGrid> 

並解析結果提交後:

 For intRow = 0 To intRows 

      GridItem = GroupList.Items(intRow)    
      groupID = GridItem.Cells(2).Text().Trim() 

      If (DirectCast(GridItem.FindControl("chkView"), 
        CheckBox).Checked) Then 
       db.insertGroupOperation(repository_selected, 
        groupID, op_view) 
      End If 
      [..] 
     Next 

謝謝大家的幫助!

再見, 安德烈

0

請看DataGrid類 - 您可以將其綁定到數據綁定並將列設置爲複選框列。

這是一個非常沉重的控制(尤其是ViewState),所以你可能想用更多的控制(和更多的工作來實現)替代更輕量級的東西,比如Repeater

無論哪種情況,您都將能夠訪問不同回發事件中的值。

+0

好了,問題是,我需要表現出一定的HREF鏈接,每行,不知道這是否有可能與DataGrid類 – 2011-01-10 15:08:56

0

如果您需要在DB的每個記錄顯示這些,你可以使用一個GridView控件。用記錄的列創建網格。然後添加一個GridTemplateField到控件,並添加您的Checkboxlist。使用數據源控件綁定您的複選框列表;否則,你將不得不在RowDataBound中進行綁定,並且也要在那裏選擇這些項目(在這兩種情況下)。用戶可以批量生成並保存更改,並且您可以通過以下方式檢索值:

foreach (GridViewRow row in this.rg.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     var list = (CheckBoxList)row.Cells[<index>].FindControl("chk"); 
     //Get checked items, save to DB 
    } 

}