■77550 / inTopicNo.2) |
Re[1]: CheckBoxList コントロールリストの使い方 |
□投稿者/ WebSurfer (694回)-(2015/10/30(Fri) 21:37:55)
|
■No77546 (Coming Soon さん) に返信
> DataValueFieldに権限があるかどうかのフラグ(0もしくは1)を指定しているので、
> CheckBoxListコントロールのDataBoundイベントでValueが「1」だったらSelected=True
> とすることでチェックマークのON/OFFを実現しています。
DataValueField に設定するのは [社員 ID] にしておいて、DataBound イベントでその
社員の権限を調べて、チェックマークの ON/OFF を設定するという方法はいかがでしょ
うか?
他には、CheckBoxList を使うのはやめて、GridView に CheckBox を配置するという手
段もあります。
以下の例は Microsoft が無償で提供している Northwind サンプルデータベースの Products
テーブルの、ProductID (int), ProductName (nvarchar), Discontinued (bit) をそれぞれ
社員 ID、社員名、権限に見たたて作ったものです。
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void CheckBoxList1_DataBound(object sender, EventArgs e)
{
CheckBoxList list = (CheckBoxList)sender;
// またクエリを投げるのは無駄なような気もするが・・・
DataView view = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
foreach (ListItem item in list.Items)
{
view.RowFilter = String.Format("ProductID='{0}'", item.Value);
bool auth = (bool)view[0]["Discontinued"];
item.Selected = auth;
}
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
CheckBox cb = (CheckBox)e.Row.FindControl("CheckBox1");
if (cb != null)
{
int id = (int)drv["ProductID"];
cb.InputAttributes.Add("value", id.ToString());
}
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
SelectCommand="SELECT TOP 10 [ProductID], [ProductName], [Discontinued] FROM [Products]">
</asp:SqlDataSource>
<h3>CheckBoxList</h3>
<asp:CheckBoxList ID="CheckBoxList1" runat="server"
DataSourceID="SqlDataSource1" DataTextField="ProductName"
DataValueField="ProductID" OnDataBound="CheckBoxList1_DataBound">
</asp:CheckBoxList>
<hr />
<h3>GridView</h3>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="SqlDataSource1" ShowHeader="False"
OnRowDataBound="GridView1_RowDataBound" GridLines="None">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="Discontinued" SortExpression="Discontinued">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server"
Checked='<%# Bind("Discontinued") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ProductName" HeaderText="ProductName"
SortExpression="ProductName" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
|
|