c# - GridView,在代码第 2 部分中添加标题行

标签 c# asp.net gridview

这是这篇文章的延续,但添加了完整的代码: ASP.NET - GridView, adding header row in code

我正在尝试添加 <thead><tbody>标记到我的 gridview控制。

我试过的都没有用。我继续收到错误:

The table must contain row sections in order of header, body, then footer.

这是我的代码:

public partial class Default : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{   
LoadGridView();
}

protected DataView GetDataSource()
{
DataSet ds = new DataSet();
ds = GetDataset();

DataTable dtRequests = ds.Tables["Admin"];
DataView dv = new DataView(dtRequests);

if (ViewState["sortexpression"] != null)
{
dv.Sort = ViewState["sortexpression"].ToString() + " " + ViewState["sortdirection"].ToString();
}
else
{
dv.Sort = "dtRequestDate DESC";
}

ds.Dispose();
return dv;
}

private void LoadGridView()
{   
gvShipments.DataSource = GetDataSource();
gvShipments.DataBind();
}

protected void Page_PreRender(object sender, EventArgs e)
{
if (gvShipments.Rows.Count > 0)
{
gvShipments.UseAccessibleHeader = true;
gvShipments.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}

private DataSet GetDataset()
{
Tools oTools = new Tools();

SqlConnection conn = new     SqlConnection(csShipping);
SqlCommand cmd = new SqlCommand();

cmd.CommandText = "dbo.[cGetOpenShipments]";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
cmd.Connection.Open();

SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();

da.SelectCommand = cmd;
da.Fill(ds, "Admin");

cmd.Connection.Close();

da.Dispose();
cmd.Dispose();
conn.Dispose();

return ds;
}   

protected void gvShipments_Sorting(object sender, GridViewSortEventArgs e)
{
ViewState["sortexpression"] = e.SortExpression;

if (ViewState["sortdirection"] == null)
{
ViewState["sortdirection"] = "asc";
}
else
{
if (ViewState["sortdirection"].ToString() == "asc")
{
ViewState["sortdirection"] = "desc";
}
else
{
ViewState["sortdirection"] = "asc";
}
}
LoadGridView();
}

protected void gvShipments_PageIndexChanging(object sender,    GridViewPageEventArgs e)
{
gvShipments.PageIndex = e.NewPageIndex;
LoadGridView();
}
}
}

最佳答案

发生这种情况的原因是因为您在 Gridview 中有此设置,并且它试图在 thead 之上生成一个寻呼机:

<PagerSettings Position="TopAndBottom" />

如果您想在页眉和页脚中使用寻呼机,您还必须将这些寻呼机分别设置为 TableRowSection.TableHeaderTableRowSection.TableFooter

所以使用下面的代码:

gvShipments.UseAccessibleHeader = true;
gvShipments.HeaderRow.TableSection = TableRowSection.TableHeader;
if (gvShipments.TopPagerRow != null)
{
     gvShipments.TopPagerRow.TableSection = TableRowSection.TableHeader;
}
if (gvShipments.BottomPagerRow != null)
{
     gvShipments.BottomPagerRow.TableSection = TableRowSection.TableFooter;
}

关于c# - GridView,在代码第 2 部分中添加标题行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19158514/

相关文章:

c# - 更新 ASP.NET One Core 中的声明值

javascript - 使用母版页时的卸载事件

c# - 确定是否启用了 ASP.NET session

c# - SQLDataSource 在从数据库中检索日期数据类型时返回 "mm/dd/yyyy hh:mm:ss"

android - 如何使用刚刚从图库中选择或从相机捕获的图像填充 gridview

C# RSA 使用私钥解密

c# - 使用 Fluent NHibernate 批量插入实体集合

带有进度条和 GridView 的 Android 图像下载器(Android 运行时)

C# 确定字典中的值

c# - 我的面板无法显示用户是否单击特定的下拉列表项