使用asp:LinqDataSource的动态列

时间:2010-08-24 15:50:46

标签: c# asp.net linq devexpress

我正在使用LinqDataSource:

<asp:LinqDataSource ID="LinqDataSource3" runat="server"      OnSelecting="LinqDataSource3_OnSelecting">       

</asp:LinqDataSource>

我有ASPxGridView

<dxwgv:ASPxGridView ID="ASPxGridView2" ClientInstanceName="ASPxGridView2Client"
                            runat="server" AutoGenerateColumns="False" 
                            DataSourceID="LinqDataSource3">
                        </dxwgv:ASPxGridView>

通过这种方式,我可以在处理onSelecting事件时动态添加列:

protected void LinqDataSource3_OnSelecting(object sender, LinqDataSourceSelectEventArgs e)
    {
        MyModelDataContext context = new MyModelDataContext();
        ASPxGridView grid = ASPxPageControl1.TabPages[3].FindControl("ASPxGridView2") as ASPxGridView;


        if(grid.Columns.Count == 0){
            GridViewDataTextColumn txtColumn1 = new GridViewDataTextColumn();
            GridViewDataTextColumn txtColumn2 = new GridViewDataTextColumn();
            txtColumn1.FieldName = "UserId";
            txtColumn2.FieldName = "FirstName";

            grid.Columns.Add(txtColumn1);
            grid.Columns.Add(txtColumn2);    
        }

        e.Result = from u in context.Users select new { UserId = u.UserId, FirstName = u.FirstName };
    } 

这一切都只是为了测试,因为我的想法是有一个解决方案,可以使用linqDataSource作为de ASPxGridView的数据源,但加入2或3个表并在此网格中显示结果。

我想问的是,它是否是一个好的解决方案,还是有其他更好的方式通过加入来呈现几个表格中的一些观点?

第二个问题是我有用户和组,我希望有一个表,其中我将有两列名称和类型

对于组类型,按类别,用户类型将是用户。

我的数据库中没有这样的表

是否可以创建特定的类。创建该类的对象列表并使用linq查询填充它并将其用作该网格的linq数据源?

clas将是:

伪代码:

Class MyClass {
string Type;
string Name;
}

还是有其他方法来创建这样的表吗?

非常感谢你的帮助再见

1 个答案:

答案 0 :(得分:1)

回答您的第一个问题,我想告诉您,创建列的代码最好转移到Page_Load事件。

至于你的第二个问题。我认为在LinqDataSource对象的Selecting事件中提供自定义IQueriable是一个很好的解决方案。您可以从那里的几个表中获取数据。有关示例,请参阅:

Select from multiple table using LINQ