【问题标题】:List of checkboxes复选框列表
【发布时间】:2011-01-10 15:00:27
【问题描述】:

祝大家新年快乐。我是 VB.NET 和 ASP.NET 的新手。这是我的问题:

我从数据库中检索记录列表,对于每一行,我需要显示 4 个复选框。我可以为每一行使用一个复选框列表,但尚不清楚如何在提交后处理结果。

我有一些对象和一些可用于该对象的操作。从数据库中,我提取包含所有操作的对象列表。对于每个操作,我想显示一个复选框以启用或禁用该操作。结果是这样的:

OBJ1 - url - [] [x] []

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

在 url 上,我有一个指向使用从 DB 检索到的 Id 创建的另一个页面的 href。要创建我使用此代码:

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

我的问题是:如何解析所有复选框?

您能帮我或给我发送链接或任何其他资源来解决我的问题吗?

非常感谢! 安德烈亚

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    查看DataGrid 类 - 您可以对其进行数据绑定并将列设置为复选框列。

    这是一个非常繁重的控件(尤其是 ViewState),因此您可能希望用更多的控件(以及更多的工作来实现)替换更轻量级的东西,例如 Repeater。

    在任何一种情况下,您都可以访问不同回发事件中的值。

    【讨论】:

    • 好的,问题是我需要为每一行显示一些 href 链接,不确定是否可以使用 DataGrid 类
    • @Andrea Girardi - 如果您在问题中提供所有的细节和约束而不是滴灌它们,这将有助于回答问题。
    • @Andrea Girardi - 您可以使用HtmlAnchor 控件或LinkButton 控件。任何一个都会产生一个锚。
    • 我想为每个操作使用一组复选框(我知道确切的行数,所以,我可以使用一组复选框作为查看选项,一个用于上传选项......)
    【解决方案2】:

    如果您需要将这些与数据库中的每条记录一起显示,您可以使用 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
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      现在它工作正常。这是我的解决方案(我在这里发布它是因为我很确定下个月我会遇到同样的问题......)

          <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
      

      感谢大家的帮助!

      再见, 安德烈亚

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        相关资源
        最近更新 更多