如何显示主细表,使用GridView DataGrid和 DataList
2006-06-09 09:39
429 查看
如何显示主细表,使用GridView DataGrid和 DataList
一般的数据绑定就不多说了,但如果要显示主细表时就需要我们运用一些技巧。其中的关键是,如何动态制定细表的DataSource。我现在知道有2种方法,和大家交流一下,一种是用DataSource='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("tableRelation")
一种是用 Session 控制。说到这里高手都知道怎么会事,我还是为和我一样的菜鸟多说两句。
先说一下GirdView和DataGrid,GridView好像是ASP.net 2.0里面的新东西,可以看作是以前DataGrid的增强版,编辑起来更加方便。它们都可以嵌套在自身的模版或DataList的模版中,我就使用嵌套来显示细表。
下面说第一种 DataSource='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("tableRelation")
第一种要求我们在数据源中创建出主细表的约束关系("tableRelation"),然后用上式指定细表的DataSource。
废话不说,看例子:
protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=|DataDirectory|/MyDemo.mdb");
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM 表1", conn);
DataSet ds = new DataSet();
da.Fill(ds, "t1");
da.SelectCommand.CommandText = "SELECT * FROM 表2";
da.Fill(ds, "t2");
DataColumn Parent = ds.Tables["t1"].Columns["凭单号"]; //外键
DataColumn Child = ds.Tables["t2"].Columns["凭单号"];
DataRelation tableRelation = new DataRelation("tableRelation", Parent, Child, false);
ds.Relations.Add(tableRelation);
this.dgMaster.DataSource = ds.Tables["t1"].DefaultView; //dgMaster 是GridView
this.dgMaster.DataBind();
}
指定DataSource:
<asp:GridView id="dgMaster" runat="server" AutoGenerateColumns="False" ShowHeader="False" Width="60%" >
<Columns>
<asp:TemplateField >
<ItemTemplate>
<B>凭单号:<%# DataBinder.Eval(Container.DataItem, "凭单号") %>
制单人:<%# DataBinder.Eval(Container.DataItem, "制单人")%>
</B>
<asp:GridView id="dgDetail" runat="server" AutoGenerateColumns="False" DataSource='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("tableRelation") %>' DataKeyField="凭单号" Width ="100%">
<Columns>
<asp:BoundField DataField="摘要" HeaderText="摘要" ></asp:BoundField>
<asp:BoundField DataField="科目" HeaderText="科目"></asp:BoundField>
<asp:BoundField DataField="贷方金额" HeaderText="贷方金额" ></asp:BoundField>
<asp:BoundField DataField="凭单号" HeaderText="借方金额"></asp:BoundField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
DataSet中的数据表刚填充之后是没有数据库中的各种约束的,需要自己在里面添加“外键约束”,这样主表的DataItem在绑定的时候才能根据创建的Relation创建细表的Source。方法就是CreateChildView。还要注意DataKeyField="凭单号" 和保证显示效果的AutoGenerateColumns="False"。
如果使用DataGrid,记得把上面Field的地方换成Column,小问题就不多说了。
下面说第2种,大家应该知道绑定控件在每次绑定数据的时候都会触发DataBound事件,DataList是ItemDataBound。GridView是RowDataBound。
所以我们在PageLoad里可以创建一个Session["Key"]=第一个数据的主键值,以后每次DataBound事件都让Session["Key"]递加,再把细表的DataSource中的参数指定为Session["Key"]就可以了。这样主表在显示的时候,每次绑定细表都会跟着Session的递加而改变。
如:
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/MyPrintDemo.mdb"
SelectCommand="SELECT [凭单号], [摘要], [科目], [借方金额], [贷方金额] FROM [表2] WHERE ([凭单号] = ?)">
<SelectParameters>
<asp:SessionParameter Name="凭单号" SessionField="Pingdanhao" Type="Int32" />
</SelectParameters>
</asp:AccessDataSource>
绑定事件中Session++:
protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
Session["Pingdanhao"] = (int)(Session["Pingdanhao"]) + 1;
}
比较而言,第一种更严谨直接,第2种也是一种解决思路。其实在DataBound事件中我们还可以做很多事情。希望能给大家一些启发。就说到这里吧。
相关文章推荐
- 如何使用ArrayList/Hashtable绑定DataGrid/DataList/Reapter
- 如何使用GridView实现不同数量显示图片不同的大小
- 如何使用ArrayList/Hashtable绑定DataGrid/DataList/Reapter ?
- GridView那点事之【如何使用DataView来绑定数据显示到表格中】
- 如何使用ArrayList/Hashtable绑定DataGrid/DataList/Reapter
- VC中ADO连接数据库,如何使用Datagrid显示的问题
- ASP.NET DEMO 14: 如何在 GridView/DataGrid 模板列中使用自动回发的 CheckBox/DropDownList
- C# GridView 在使用分页时,如何不显示底部自动添加的分页风格
- 如何让Gridview在没有数据的时候显示表头[没有使用SqlDataSource控件时]
- ASP.NET DEMO 14: 如何在 GridView/DataGrid 模板列中使用自动回发的 CheckBox/DropDownList
- 如何使用动态创建模板列并绑定数据(GridView,Repeater,DataGrid)
- gridview如何显示柱状图(如何使用绑定的值)
- 如何使用 RowDataBound 事件在数据源中的字段值显示在 GridView 控件中之前修改该值
- DataGrid,DataList,Repeater等数据访问控件的区别及总结、使用Repeater控件显示数据
- ASP.NET DEMO 14: 如何在 GridView/DataGrid 模板列中使用自动回发的 CheckBox/DropDownList
- easyui中datagrid如何使用formatter显示子对象的属性
- 在使用Repeater、DataList 或 DataGrid 的模板列表时,根据不同状态,显示不同颜色
- 如何使用动态创建模板列并绑定数据(GridView,Repeater,DataGrid)
- 如何使用动态创建模板列并绑定数据(GridView,Repeater,DataGrid)
- GridView那点事之【如何使用ExecuteReader()来绑定数据显示到表格中】 .