【问题标题】:GridView DataSource always returns nullGridView 数据源总是返回 null
【发布时间】:2017-04-06 12:01:45
【问题描述】:

我正在尝试在网格视图中进行排序 (ASP.Net 4.5)

代码非常简单。网格视图的 AllowSortingAutoGenerateColumns 设置为 true

使用SELECT * FROM TABLE

等简单查询在按钮单击时填充网格视图

排序事件有以下代码(代码可能有一些语法错误,因为我只是写它而不是从原始源复制它):

protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dt = grid1.DataSource as DataTable;

    if(dt != null)
    {
        //do some sorting
    }
}

问题是 dt 始终为空。我尝试使用以下但同样的问题。

DataTable dt = (DataTable)grid1.DataSource;

我尝试在视图状态中保存数据表(在填充 gridview 时在按钮单击事件上),然后当我在上面的排序方法中调用它时,现在 dt 不为空,但它仍然为空,其中有 0 行。

为什么dt为null,如何排序?

编辑

按钮点击代码如下

SqlConnection con = new SqlConnection(strConnection);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = con;
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "Select * from titles";
SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd);
DataTable dtRecord = new DataTable();
sqlDataAdap.Fill(dtRecord);
grid1.DataSource = dtRecord;
ViewState["grid1"] = dtRecord;
grid1.DataBind();

【问题讨论】:

  • 如何以及何时设置网格的数据源属性?
  • 请使用您设置grid1.DataSource的代码以及SQL语句更新OP。
  • 能否请您提供设置数据源的行?
  • 语法正确DataTable dt = (DataTable)grid1.DataSource; 问题是您没有向我们展示您最初为grid1 设置数据源的位置,请显示与您当前的问题和/或问题相关的所有相关代码。 .
  • 我用按钮点击事件代码更新了问题。

标签: c# sorting gridview datatable


【解决方案1】:

要将 DataSource 转换回 DataTable,请尝试以下操作。设置grid1的DataSource后,添加:

ViewState["mydatasource"] = dtRecord;

然后,将其添加到排序事件中:

DataTable dt = ViewState["griddatasource"] as DataTable;

对于排序,请尝试以下操作:

DataView dv = dt.DefaultView;
dv.Sort = "col1 desc";

DataTable sortedDT = dv.ToTable();

最终代码类似于:

protected void GridView_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dt = ViewState["griddatasource"] as DataTable;

    if(dt != null)
    {
        DataView dv = dt.DefaultView;
        dv.Sort = "col1 desc";
        DataTable sortedDT = dv.ToTable();
        grid1.DataSource = dortedDT;
    }
}

【讨论】:

  • BindingSource 仅在 WinForms 中可用。
  • 我已经这样做了,但没有运气。我通过在 GridView_Sorting 事件中再次调用该 SQL 语句来解决它。
  • 运行 SQL 语句两次或更多次似乎效率低下。如果您将 dt 全局保存然后使用它会怎样?不理想,但比运行 SQL 两次或更多次更有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2013-02-16
  • 2013-08-01
  • 2019-04-20
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多