我从DB中检索记录列表,对于每一行,我需要显示4个复选框。我可以为每一行使用一个checkboxlist,但是如何在提交后处理结果并不是很清楚。
我有一些对象和一些可用于该对象的操作。从数据库中我提取了一个包含所有操作的对象列表。对于每个操作,我想显示一个复选框以启用或禁用该操作。结果是这样的:
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>
我的问题是:如何解析所有复选框?
你能帮我或给我一个链接或任何其他资源来解决我的问题吗?
非常感谢! 安德烈答案 0 :(得分:0)
查看DataGrid
类 - 您可以对其进行数据绑定并将列设置为复选框列。
这是一个非常重的控件(特别是ViewState
),因此您可能希望用更多控件(以及更多实现工作)替换更轻量级的内容,例如Repeater
。< / p>
在任何一种情况下,您都可以访问不同回发事件中的值。
答案 1 :(得分:0)
要过滤CheckboxList中的复选框,您可以参考以下链接: http://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.checkboxlist%28v=vs.80%29.aspx
答案 2 :(得分:0)
如果需要在数据库中显示每条记录,可以使用GridView控件。使用记录列创建网格。然后将GridTemplateField添加到控件,并添加您的Checkboxlist。使用数据源控件绑定您的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 :(得分: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
谢谢大家的帮助!
再见, 安德烈