将DataSet绑定到GridView

时间:2009-10-22 14:21:51

标签: asp.net linq gridview dataset

我遇到了问题,我觉得这样做很简单,我做得不对。

我有一个简单的ASP.NET项目。我有一个从Oracle数据库填充的DataSet。 DataSet中的表有两列:“account_code”和“account_descr”。

用户在搜索词中输入文本框。我使用LINQ进行查询以从DataSet获取结果并将它们放入另一个变量中。

然后我尝试将变量绑定到gridview。

代码:

Dim results = AccountsDataSet.Tables("Results")

Dim filteredResults = From q In results Where q.Item("account_code").ToString.StartsWith(search) Select q.Item("account_code")

GridView1.DataSource = filteredResults
GridView1.DataBind()

上面的代码有效。唯一的事情是它只显示一列。我需要它来显示两列。但是,如果我将LINQ行更改为:

Dim filteredResults = From q In results Where q.Item("account_code").ToString.StartsWith(search) Select q.Item("account_code"), q.Item("account_descr")

它抛出错误“只能从没有参数的简单或限定名称推断范围变量名。”

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但不应该LINQ行是这样的:

Dim filteredResults = From q In results Where q.Item("account_code").ToString.StartsWith(search) Select New With { .AccountCode = q.Item("account_code"), .AccountDesc = q.Item("account_descr") }

不是选择单个属性,而是选择整个实体。

答案 1 :(得分:0)

您的select语句明确要求输入一列。以下信息与您相关,希望它有意义

有一条规则要注意哪个是LINQ规则,而不是LINQ to Entities。当您在投影中创建一个on the fly属性并且您正在使用函数创建时,LINQ无法确定要调用该属性的内容,因此您必须使用变量名称“fullname”来命名它。 / p>

Dim custs = From cust In .Customer  By cust.FullNameAlpha 
SELECT cust.ContactID, fullname = cust.LastName.Trim & "," & cust.FirstName

答案 2 :(得分:0)

您需要返回匿名类型以获取所需的所有属性,否则它将返回所有公共属性,这些属性还将包括RowError和HasErrors。这是我使用的代码:

 gvCustomers.DataSource = from c in ds.Tables[0].AsEnumerable()
                                         where c["FirstName"].ToString().StartsWith("J")
                                         select new { FirstName = c["FirstName"].ToString(), LastName = c["LastName"].ToString() }; 
                gvCustomers.DataBind(); 

因为DataTable不是IEnumerable,所以我使用了AsEnumerable()方法,该方法将返回一个强类型的DataRow集合。您还可以显式指定类型,如以下代码所示:

  gvCustomers.DataSource = from DataRow c in ds.Tables[0].Rows
                                             where c["FirstName"].ToString().StartsWith("J")
                                             select new { FirstName = c["FirstName"].ToString(), LastName = c["LastName"].ToString() }; 
                    gvCustomers.DataBind(); 

希望它有所帮助!