当前位置:编程学习 > C#/ASP.NET >>

ASPxGridView

我想建立两个ASPxGridView(主,从),当用户选择主表的一行时,把行的主键取出,根据主键取得相应的DataTable,然后把DataTable绑定到从表中,并显示。有什么方法可以实现这种动态的绑定呢? --------------------编程问答-------------------- 创建一个DataSet,添加两个DataTable进去,设置两个DataTable的关系(主键、外键关系).
在ASPxGridView中添加两个GridView,设置两个Gridview的关系。

然后直接绑定: AspxGridView.DataSrouce = ds.Table[主表];
就可以得到你想要的效果了。 --------------------编程问答--------------------
引用 1 楼 patrickpan 的回复:
在ASPxGridView中添加两个GridView,设置两个Gridview的关系。 

不是很明白 --------------------编程问答--------------------
利用GridView显示主细表并一次编辑明细表所有数据的例子
--------------------编程问答--------------------
引用 3 楼 gdjlc 的回复:
利用GridView显示主细表并一次编辑明细表所有数据的例子 

谢谢啊,不过好像没什么用。 --------------------编程问答-------------------- 我想要的是类似ListBox的联动效果 --------------------编程问答--------------------
首先要准备两个数据源,一个是主表数据源,一个是从表数据源。

主表数据源  
<asp:AccessDataSource ID="AccessDataSource_Master" runat="server" DataFile="~/App_Data/Master-Detail.mdb"
            SelectCommand="SELECT * FROM [订单]" DeleteCommand="DELETE FROM [订单] WHERE [订单 ID] = ?" InsertCommand="INSERT INTO [订单] ([订单 ID], [订购日期], [采购订单编号], [要求截止日期], [约定截止日期], [货主名称], [送货地址]) VALUES (?, ?, ?, ?, ?, ?, ?)" UpdateCommand="UPDATE [订单] SET [订购日期] = ?, [采购订单编号] = ?, [要求截止日期] = ?, [约定截止日期] = ?, [货主名称] = ?, [送货地址] = ? WHERE [订单 ID] = ?">
            
        </asp:AccessDataSource>
 

从表数据源 
<asp:AccessDataSource ID="AccessDataSource_Detail" runat="server" DataFile="~/App_Data/Master-Detail.mdb"
            SelectCommand="SELECT * FROM [订单明细] WHERE ([订单 ID] = ?)" DeleteCommand="DELETE FROM [订单明细] WHERE [订单明细 ID] = ?" InsertCommand="INSERT INTO [订单明细] ([订单明细 ID], [订单 ID], [售出日期], [数量], [单价], [折扣]) VALUES (?, ?, ?, ?, ?, ?)" UpdateCommand="UPDATE [订单明细] SET [订单 ID] = ?, [售出日期] = ?, [数量] = ?, [单价] = ?, [折扣] = ? WHERE [订单明细 ID] = ?">
            
            <SelectParameters>
                <asp:SessionParameter Name="订单_ID" SessionField="OrderID" Type="Int32" />
            </SelectParameters>
        </asp:AccessDataSource>
这个地方有一点需要注意的是 SelectParameters 的SessionField 属性。由于  SelectCommand 带一个参数,这个参数的值是存放在Session中的,这个参数的Session名字是OrderID。这个参数主要用来存放主表的当前行的主键值。

到这里所需的数据源已经完成了,下面就要用到这个控件了。

第一步:

将ASPxGridView  控件拖放到页面中,设置数据源为 AccessDataSource_Master,将ShowDetailRow的属性设为True

第二步:

编辑该控件的DetailRow 模板,在其中放置一个ASPxGridView  控件,并设置其数据源为AccessDataSource_Detail

第三步:

选中DetailRow模板中的ASPxGridView  控件,为其添加BeforePerformDataSelect 事件,
protected void ASPxGridView_Detail_BeforePerformDataSelect(object sender, EventArgs e)
    {
        Session["OrderID"] = (sender as ASPxGridView).GetMasterRowKeyValue();
    }
以上代码所要完成的功能是,当展开从表时,将主表的当前行的主键值放入Session中,以供从表的数据源使用。



--------------------编程问答-------------------- 楼主你参照以上的描述,自己试着摸索一下! --------------------编程问答-------------------- protected void AGVEditCkthDtl_FocusedRowChanged(object sender, EventArgs e)
    {
        int focusRowIndex = this.AGVEditCkthDtl.FocusedRowIndex;
        object objKey = this.AGVEditCkthDtl.GetRowValues(focusRowIndex, "id");
        ShowData(objKey+"");
    }
触发主表的AspxGrid控件FocusedRowChanged事件,获取主表的主键给字表的aspxgrid控件绑定数据。 --------------------编程问答-------------------- 忘了补充一句:主表的AspxGrid控件界面要加上一句
<ClientSideEvents FocusedRowChanged="function(s, e) { 子表的aspxgrid控件的ClientInstanceName属性值.PerformCallback(s.GetFocusedRowIndex());}" /> --------------------编程问答-------------------- 姑娘,不行啊 --------------------编程问答-------------------- 看样子会用devexpress控件的人还不少啊。

介绍下标准做法:先在主表模板里建好自己的从表

    <dx:ASPxGridView ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" DataSourceID="XpoDataSource1"
....>
  ......
        <Templates>
            <DetailRow>
                <dx:ASPxGridView ID="detailGrid" runat="server" KeyFieldName="Oid" DataSourceID="XpoDataSource2"
                    Width="100%" OnBeforePerformDataSelect="detailGrid_DataSelect">
                    <Columns>
                        <dx:GridViewDataColumn FieldName="Oid" Caption="编号" VisibleIndex="1" />
                        <dx:GridViewDataColumn FieldName="SeriesId.Title" Caption="商品名称" VisibleIndex="2" />
                        <dx:GridViewDataColumn FieldName="Count" Caption="数量" VisibleIndex="3" />
                        <dx:GridViewDataDateColumn FieldName="Price" Caption="单价" VisibleIndex="4" />
                    </Columns>
                </dx:ASPxGridView>
            </DetailRow>
        </Templates>
        <SettingsDetail ShowDetailRow="True" />



然后后台代码再写个事件:

        protected void detailGrid_DataSelect(object sender, EventArgs e)
        {
            ASPxGridView detailGrid = sender as ASPxGridView;
            XpoDataSource2.Criteria = "OrderId=" + detailGrid.GetMasterRowKeyValue();
        }
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,