ASPxGridView中如何对主从表绑定数据

ASPxGridView中如何对主从表绑定数据

注:在从表的aspxgridview中的(OnDataBinding()事件中绑定数据)-----代码如下

//绑定属性值表
protected void grid2_sonTable_DataBinding(object sender, EventArgs e)
{
ASPxGridView songrid = (ASPxGridView)sender; //实例化从表表
object _faterid = songrid.GetMasterRowKeyValue(); //获取主表行id(模板grid中的id值)
DataTable dt = new DataTable();
dt = goodsmanagebll.Get_GetAttributeValueListByAttrId(int.Parse(_faterid.ToString())).Tables[0];
songrid.DataSource = dt;

}

 

ASPXGridView 主从表 master detail 动态绑定数据

 
复制代码
DevExpress 提供的ASPXGridView的matserdetail主从表的例子是SQLDataSource的,我需要动态绑定数据没法用,在网上找了一下,试验后实现如下  aspx:  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebForm2.aspx.cs" Inherits="Com.Jesus.Web.WebSite.WebForm2" %>

<%@ Register Assembly="DevExpress.Web.ASPxEditors.v11.1, Version=11.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"     Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %>
<%@ Register Assembly="DevExpress.Web.ASPxGridView.v11.1, Version=11.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a"     Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <dx:ASPxGridView ID="masterGridView" runat="server">
            <Templates>
                <DetailRow>
                    <dx:ASPxGridView ID="detailGridView" runat="server" AutoGenerateColumns="False" DataSourceID="CarDataSource"                         OnBeforePerformDataSelect="detailGridView_BeforePerformDataSelect">
                        <Columns>
                            <dx:GridViewDataTextColumn FieldName="ID1" VisibleIndex="0">
                            </dx:GridViewDataTextColumn>
                            <dx:GridViewDataTextColumn FieldName="CarName" VisibleIndex="1">
                            </dx:GridViewDataTextColumn>
                        </Columns>
                        
                    </dx:ASPxGridView>
                </DetailRow>
            </Templates>
            <SettingsDetail AllowOnlyOneMasterRowExpanded="true"/>
            <SettingsDetail ShowDetailRow="true" />
        </dx:ASPxGridView>
    </div>
    <asp:ObjectDataSource ID="CarDataSource" runat="server" SelectMethod="GetMyCar" TypeName="Com.Jesus.Web.WebSite.WebForm2">
        <SelectParameters>
            <asp:SessionParameter Name="id" SessionField="ID123" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>
    </form>
</body>
</html>  cs:  using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using DevExpress.Web.ASPxGridView; using System.Data; namespace Com.Jesus.Web.WebSite {     public partial class WebForm2 : System.Web.UI.Page     {         protected void Page_Load(object sender, EventArgs e)         {              masterGridView.DataSource = GetDriver();             masterGridView.KeyFieldName = "ID234";             masterGridView.DataBind();         }
//后台查询接口,返回主表数据 public DataTable GetDriver() { DataTable dt = new DataTable(); dt.Columns.Add("ID234"); dt.Columns.Add("CarName"); for (int i = 0; i < 10; i++) { DataRow dr = dt.NewRow(); dr["ID234"] = i * 10 ; dr["CarName"] = Convert.ToString(i * 10 ); dt.Rows.Add(dr); } return dt; } protected void detailGridView_BeforePerformDataSelect(object sender, EventArgs e) { //将主表的主键写入Session,以便于ObjectDataSource在SELECT时调用 网上也有获取订单号等等的 都是通过这个方法 Session["ID123"] = (sender as ASPxGridView).GetMasterRowKeyValue(); } public DataTable GetMyCar(int id) { DataTable dt = new DataTable(); dt.Columns.Add("ID1"); dt.Columns.Add("CarName"); for (int i = 0; i < 10; i++) { DataRow dr = dt.NewRow(); dr["ID1"] = i * 10 + id; dr["CarName"] = Convert.ToString(i * 10 + id); dt.Rows.Add(dr); } return dt; } } } 这里面有几个对应关系: <asp:ObjectDataSource ID="CarDataSource" runat="server" SelectMethod="GetMyCar" TypeName="Com.Jesus.Web.WebSite.WebForm2"> <SelectParameters> <asp:SessionParameter Name="id" SessionField="ID123" Type="Int32" /> </SelectParameters> </asp:ObjectDataSource> 1、SelectMethod="GetMyCar" 与cs中的同名函数名称一致,至于这个方法是否是静态的倒是无所谓。 2、GetMyCar函数的参数名和类型应与 Name="id" Type="Int32" 一致,至于是否与SQL语句中的字段名相同也无所谓。 3、 Session["ID123"] = (sender as ASPxGridView).GetMasterRowKeyValue(); Session名称与SessionField="ID123" 一致 4、原理:将主表的Key值存在session里,然后通过id传递给SelectMethod,将SelectMethod函数的返回值作为数据源付给从表。 还有另外一种做法就是在主表的HTMLRowPrepared事件中逐一绑定每个从表,这样会一次访问多次数据库,除非结合分页才能减少访问量,空间和时间占用率较高。 从主表传递多个参数给SelectMethod从原理上应该不行,但可以根据主表主键select出多个值。 http://www.jinghuazhi.com  

 

渝公网安备 50011902000225号

渝ICP备18008233号-1