【问题标题】:Can GridView be filled with var?GridView可以用var填充吗?
【发布时间】:2012-10-15 10:17:19
【问题描述】:

我正在尝试在 GridView 中显示 Excel 工作表和 sql server 数据表之间的重复行。

这是我的代码:

var matched = (from table1 in dt4.AsEnumerable()
                join table2 in oltlb.AsEnumerable() on
                table1.Field<int>("ID") equals table2.Field<int>("ID")
                where table1.Field<string>("Data") == table2.Field<string>("Data")
                select table1);
DataTable dthi5 = new DataTable();
dthi5 = matched.CopyToDataTable();

我可以在 GridView 中显示 var 的值吗?

【问题讨论】:

  • 尝试将其转换为 .ToList();
  • 请您指定我需要在哪里添加 .ToList()?我是初学者。
  • 尝试将dth15绑定到GridView
  • 你的例子出了点大问题!

标签: c# asp.net sql-server linq


【解决方案1】:

你绝对可以将 var 绑定到 gridview。

假设有一个包含三个字段的员工表

emp_id emp_fname emp_lname

第一种方式:如果您将整个表或特定记录提供给 var 然后列出将起作用...

一旦你建立了与 sql server 的成功连接,employees 就是一个数据上下文类。

var result = from alias in dc.employees
          where alias.emp_id == id --(this is the passed parameter)

也可以手动指定id,例如:

where alias.emp_id == 5
          select alias;

id = 5 的整个员工记录将被选中。

您现在可以简单地将其绑定到 gridview

gridview1.datasource = result.tolist();
gridview1.databind();

如果你给整张桌子,那么 tolist 也可以工作

var result  = from alias in dc.employess
              select alias;

gridview1.datasource = result.tolist();
gridview1.databind();

如果您选择多个列,则 tolist 将不起作用。您需要返回对象。

该方法已在 class1 中定义。

public static object returnquery()
{

dcdatacontext dc = new dcdatacontext();

var result = from alias in dc.employees
             where alias.emp_id == 5
             select new
             {
                alias.emp_fname,
                alais.emp_lname
             };

 return result;
}

你需要抓住物体。

object obj = new class1.returnquery();

gridview1.datasource = obj;
gridview1.databind();

或者您可以简单地尝试一下,看看它是否有效。这个我没试过。

var result = from alias in dc.employees
             where alias.emp_id == 5
             select new
             {
                alias.emp_fname,
                alias.emp_lname
             };

gridview1.datasource= result.object();
gridview1.databind();

【讨论】:

    【解决方案2】:

    试试这个

    var matched = (from table1 in dt4.AsEnumerable()
                      join table2 in oltlb.AsEnumerable() on
                    table1.Field<int>("ID") equals table2.Field<int>("ID")
                      where table1.Field<string>("Data") == table2.Field<string>("Data")
                      select table1);
          DataTable dthi5 = new DataTable();
          dthi5 = matched.CopyToDataTable();
    
    myGridView.DataSource = dthi5;
    myGridView.DataBind();
    

    或者

    myGridView = matched.ToList();
    myGridView.DataBind();
    

    【讨论】:

      【解决方案3】:

      是的,它可以用您的变量填充。 (在这种情况下,您必须将其转换为.ToList()

      你必须明白var 是强类型的!它不像在php中可以切换变量的类型。

      试着写

      var x = null;
      

      在 Visual Studio 中。会有错误!

      您的var 每次 都必须声明为类型安全的。让程序员不必总是在变量前面写长类型名只是一个简短的咒语。所以你的varIEnumerable&lt;T&gt;

      【讨论】:

      • 对不起,我是一个完整的新手,你能解释一下我应该在上面的代码中添加或替换的地方吗?
      • 只需添加 .ToList() - ...select table1).ToList();
      • System.InvalidCastException:指定的强制转换无效。我添加了 .ToList();正如你所说,然后是 GridView1.DataSource=matched;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 2017-03-06
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多