如何在asp.net中使用泛型列表代替数据集/数据表?

如何在asp.net中使用泛型列表代替数据集/数据表?,asp.net,linq,generics,ado.net,Asp.net,Linq,Generics,Ado.net,我想将数据库中的所有数据复制到将绑定到gridview的通用列表中。但是我做不到。我正在做的是: Collapse | Copy Code 公共列表fillgridviewDAL() { List NameList=(来自dataset.Tables[“MyTableName”].AsEnumerable()中的r) 选择r.Field(“姓名”)+r.Field(“年龄”)+r.Field(“工资”)+r.Field(“城市”)).ToList(); 返回姓名列表; } 当我看到数据集中的

我想将数据库中的所有数据复制到将绑定到gridview的通用列表中。但是我做不到。我正在做的是:

Collapse | Copy Code
公共列表fillgridviewDAL()
{
List NameList=(来自dataset.Tables[“MyTableName”].AsEnumerable()中的r)
选择r.Field(“姓名”)+r.Field(“年龄”)+r.Field(“工资”)+r.Field(“城市”)).ToList();
返回姓名列表;
}

当我看到数据集中的内容时,它会显示完整的表,但当我使用上面的方法使用泛型列表时,它会在列中显示,并在特定索引处给出一个结果行。简而言之,它以字符串形式给我输出。如何将gridview绑定到我的常规列表。

您应该创建一个类来保存行数据:

public class Item
{
    public string Name { get; set; }
    public string Age { get; set; }
    public string Salary { get; set; }
    public string City { get; set; }
}
然后返回
列表

公共列表fillgridviewDAL()
{
List NameList=(来自dataset.Tables[“MyTableName”].AsEnumerable()中的r)
选择新项目{
名称=r.字段(“名称”),
年龄=r.字段(“年龄”),
工资=r.字段(“工资”),
城市=右视野(“城市”)
}).ToList();
返回姓名列表;
}

下面的
将使用选定列设置网格的数据源

gridview.DataSource = dataset.Tables["MyTableName"]
                       .DefaultView.ToTable(false, "name", "age", "salary", "city");
如果动态选择列,则假定列名位于
string[]
调用的
columns

gridview.DataSource =dataset.Tables["MyTableName"].DefaultView.ToTable(false, columns);

我不确定我是否理解你想要实现的目标。也许一个字典列表可以做到这一点。但没有试过。希望这会有所帮助

public List<Dictionary<String, object>>   fillgridviewDAL()
{
List<Dictionary<String, object>> rows =
    dataset.Tables["MyTableName"]
                .AsEnumerable()
                .Select(
                    row =>
                       row.Table.Columns
                          .Cast<DataColumn>()
                          .ToDictionary(column => column.ColumnName,
                                        column => row[column]))
                .ToList();

    return rows ;
}
公共列表fillgridviewDAL()
{
列出行=
dataset.Tables[“MyTableName”]
.可计算的()
.选择(
行=>
row.Table.Columns
.Cast()
.ToDictionary(column=>column.ColumnName,
列=>行[列])
.ToList();
返回行;
}
或者,如果您只对值感兴趣,可以选择
列表
,如下所示:

public List<List<object>> fillgridviewDAL()
{
    DataSet dataset = null;
    List<List<object>> rows =
        dataset.Tables["MyTableName"]
                    .AsEnumerable()
                    .Select(
                        row =>
                        row.Table.Columns
                                .Cast<DataColumn>()
                                .Select(column => row[column]).ToList())
                    .ToList();

    return rows;
}
公共列表fillgridviewDAL()
{
数据集=null;
列出行=
dataset.Tables[“MyTableName”]
.可计算的()
.选择(
行=>
row.Table.Columns
.Cast()
.Select(列=>行[列]).ToList()
.ToList();
返回行;
}

如果我不知道表中的列怎么办?只要知道表名就好了。那么我将如何声明公共类项{public string Name{get;set;}公共字符串Age{get;set;}公共字符串Salary{get;set;}公共字符串City{get;set;}}}但是我不想使用dataset.hi dude…我可以填充列表集合而不是使用c#填充dataset或datatable吗?就像我写dataadapter.fill一样(datatable/dataset)所以我可以编写dataadapter.fill(list)。谢谢。@R_sharma yes,带有dataadapter的扩展方法,该扩展方法将在后台实例化数据集,填充它,并执行上述处理之一,返回结果列表。请给我一些提示。谢谢。
public List<Dictionary<String, object>>   fillgridviewDAL()
{
List<Dictionary<String, object>> rows =
    dataset.Tables["MyTableName"]
                .AsEnumerable()
                .Select(
                    row =>
                       row.Table.Columns
                          .Cast<DataColumn>()
                          .ToDictionary(column => column.ColumnName,
                                        column => row[column]))
                .ToList();

    return rows ;
}
public List<List<object>> fillgridviewDAL()
{
    DataSet dataset = null;
    List<List<object>> rows =
        dataset.Tables["MyTableName"]
                    .AsEnumerable()
                    .Select(
                        row =>
                        row.Table.Columns
                                .Cast<DataColumn>()
                                .Select(column => row[column]).ToList())
                    .ToList();

    return rows;
}