使用linq绑定gridview

时间:2016-06-13 05:46:19

标签: c# linq gridview

我尝试使用linq在网格视图中填充数据.. 我试试这个

private void populateveh()
    {
        TData1 tg = new TData1();
        GridView1.DataSource = tg.select_regionveh();
        GridView1.DataBind();

    }.

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        this.populateveh();
    }

但这显示错误

Data source is an invalid type.  It must be either an IListSource, IEnumerable, or IDataSource.

在这一行  GridView1.DataSource = tg.select_regionveh();

方法

   #region Function Imports

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    public int select_regionveh()
    {
        return base.ExecuteFunction("select_regionveh");
    }

    #endregion
}

任何解决方案?

1 个答案:

答案 0 :(得分:1)

虽然你没有这么说,但我假设你的对象GridView1是一个DataGridView。根据{{​​3}},必须实现以下四个接口之一:

  • IList接口,包括一维数组。
  • IListSource接口,例如DataTable和DataSet类。
  • IBindingList接口,例如BindingList类。
  • IBindingListView接口,例如BindingSource类。

这意味着DataSource属性只能用于显示一系列项目,而不仅仅是一个项目。

您想要显示TData1.select_regionveh()的返回值。此返回值不是序列,它只是一个整数。

也许您只想用这个整数填充DataGridView?

在这种情况下,有两种可能的方法:

<强> DataGridViewRowCollection

如果已为DataGridView定义了列,则可以按如下方式添加单个项目:

int addedRowIndex = GridView1.Rows.Add();
DataGridViewRow addedRow = Gridview1.Rows[addedRowIndex];
addedRow.Cells[columnValue.Index] = tg.select_regionveh();
addedRow.Cells[collumnDescription.Index] = ... // other columns

BindingList方法

您可以创建类型为T的绑定列表,其中T是您在行中所需的类型。将返回的整数添加到此列表中:

BindingList<MyType> bindingList = new BindingList<MyType>();
MyType x = new MyType()
{
    myProperty1 = tg.select_regionveh(),
    myotherproperty = ...,
}
bindingList.Add(x);
GridView1.DataSource = bindingList;

使用类型化绑定列表的优点是,在向datagridview写入值或从datagridview读取值时,不必逐个填充单元格。您只需读取并将它们写入BindingList。

缺点是操作员在编辑DataGridview的单元格时自由度较低。例如,如果您的BindingList显示DateTime属性,则显示值必须始终采用可以解析为DateTime的格式。用户不能说:“现在我只填补这一年。在我按OK之前我填写了剩余的字段”