<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Page language="c#"%>
<HTML>
<HEAD>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
OleDbConnection conn = new OleDbConnection (<接続文字列>);//Connectionオブジェクト作成
try
{
conn.Open (); //データベース接続を確立
OleDbCommand cmd = new OleDbCommand (); //Commandオブジェクト
cmd.Connection = conn;
cmd.CommandText = "SELECT CODE, NM FROM TABLE1";
OleDbDataAdapter adapter = new OleDbDataAdapter (cmd);
DataSet ds = new DataSet ();
adapter.Fill (ds, "dt1");
cmd.CommandText = "SELECT CODE, V, T FROM TABLE2";
adapter.SelectCommand = cmd;
adapter.Fill (ds, "dt2");
//リレーション追加
ds.Relations.Add("Rel1", ds.Tables["dt1"].Columns["CODE"], ds.Tables["dt2"].Columns["CODE"],false);
dtgrid.DataSource = ds.Tables["dt1"];
dtgrid.DataBind ();
}
catch (OleDbException ex)
{
//エラー処理
}
catch (Exception ex)
{
//エラー処理
}
finally
{
conn.Close (); //データデース接続を閉じる
}
}
}
ICollection CrDataSource (DataRow[] drs)
{
DataTable dt = new DataTable ();
dt.Columns.Add("T", typeof(string));
dt.Columns.Add("V", typeof(string));
foreach (DataRow dr in drs)
{
DataRow newRow = dt.NewRow ();//新規DataRowを作成
newRow["T"] = dr["T"]; //DataRowを初期化
newRow["V"] = dr["V"];
dt.Rows.Add (newRow); //DataRowをDataTableに追加
}
DataView dv = new DataView(dt);
return dv;
}
</script>
</HEAD>
<body>
<form runat="server">
<asp:datagrid id="dtgrid" runat="server" ShowHeader="False" AutoGenerateColumns="False" GridLines="None">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "NM") %>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:DropDownList id="ddl" runat="server" DataValueField="V" DataTextField="T" datasource='<%# CrDataSource (((DataRowView)Container.DataItem).Row.GetChildRows("Rel1")) %>'>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
</form>
</body>
</HTML>
|