C# GridView数据源始终返回null
我正在尝试在网格视图中进行排序(ASP.Net 4.5) 代码非常简单。栅格视图的允许排序和自动生成列设置为真 网格视图是使用简单的查询(如SELECT*fromtable)在单击按钮时填充的 排序事件有以下代码(代码可能有一些语法错误,因为我只是编写它,而不是从原始源代码复制它): 问题是dt始终为空。我试着使用下面的方法,但问题是一样的C# GridView数据源始终返回null,c#,sorting,gridview,datatable,C#,Sorting,Gridview,Datatable,我正在尝试在网格视图中进行排序(ASP.Net 4.5) 代码非常简单。栅格视图的允许排序和自动生成列设置为真 网格视图是使用简单的查询(如SELECT*fromtable)在单击按钮时填充的 排序事件有以下代码(代码可能有一些语法错误,因为我只是编写它,而不是从原始源代码复制它): 问题是dt始终为空。我试着使用下面的方法,但问题是一样的 DataTable dt = (DataTable)grid1.DataSource; 我尝试在viewstate中保存datatable(在填充grid
DataTable dt = (DataTable)grid1.DataSource;
我尝试在viewstate中保存datatable(在填充gridview时单击按钮事件),然后在上面的排序方法中调用它时,现在dt不为null,但它仍然为空,其中有0行
为什么dt为空以及如何进行排序
编辑
点击按钮的代码如下所示
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();
要将数据源转换回DataTable,请尝试以下操作。设置grid1的数据源后,添加以下内容:
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;
}
}
最终代码类似于:
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;
}
}
要将数据源转换回DataTable,请尝试以下操作。设置grid1的数据源后,添加以下内容:
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;
}
}
最终代码类似于:
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;
}
}
如何以及何时设置网格的datasource属性?请使用设置代码
grid1.datasource
以及SQL语句更新OP。请给出设置datasource的行。此语法正确DataTable dt=(DataTable)grid1.datasource代码>问题是您没有向我们显示您最初为网格设置数据源的位置1请显示与当前问题和/或问题相关的所有相关代码..我已使用按钮单击事件代码更新了问题。您如何以及何时设置网格的数据源属性?请使用您的代码更新OP将grid1.DataSource
与SQL语句一起设置。请给出设置DataSource的行。此行的语法正确DataTable dt=(DataTable)grid1.DataSource代码>问题是您没有向我们显示最初为grid1设置数据源的位置。请显示与当前问题和/或问题相关的所有相关代码。我已使用按钮单击事件代码更新了问题。BindingSource仅在WinForms中可用。我已经完成了此操作,但运气不佳。我通过在GridView_排序事件中再次调用该SQL语句解决了这个问题。运行一个SQL语句两次或两次以上似乎有点低效。如果您全局保存dt,然后直接使用它呢?这并不理想,但比运行SQL两次或多次更有效。BindingSource仅在WinForms中可用。我已经这样做了,但运气不好。我通过在GridView_排序事件中再次调用该SQL语句解决了这个问题。运行一个SQL语句两次或两次以上似乎有点低效。如果您全局保存dt,然后直接使用它呢?不理想,但比运行SQL两次或多次更有效。