【问题标题】:Reading from gridview with two headers从带有两个标题的gridview中读取
【发布时间】:2022-01-15 21:38:19
【问题描述】:

我正在使用带有 C# 的 ASP.NET。我有GridView 并且需要有两个标题。所以我用下面的代码在数据绑定后添加了另外一个header。

gridView.DataSource = dataTable;
gridView.DataBind();
GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
TableHeaderCell cell = new TableHeaderCell
{
    Text = titleST,
    ColumnSpan = 5
};
row.Controls.Add(cell);
row.BackColor = ColorTranslator.FromHtml("#3AC0F2");
row.BorderStyle = BorderStyle.Solid;
row.BorderColor = Color.Black;
row.BorderWidth = Unit.Parse("2");
gridView.HeaderRow.Parent.Controls.AddAt(0, row);

问题是当我尝试从gridView 读取数据时,不知何故第一行没有数据。 这就是我读取数据的方式:

foreach (GridViewRow row in gridView.Rows)
{
    int atmpt = ((DropDownList)row.FindControl("ddlAttemptsT")).SelectedIndex;
    Int64 selId = Int64.Parse(((HiddenField)row.FindControl("SelId")).Value);
    double wt = int.Parse(row.Cells[2].Text);
    double grade = double.Parse(((TextBox)row.FindControl("grade")).Text);
}

我在想我在索引 0 处添加了新的标题,它删除了第一行。但在 GUI 中,第一行存在。我试着做AddAt(-1, row) 但这会将它添加到gridView 的底部。

关于如何解决这个问题的任何建议? 请让我知道是否需要进一步澄清我的问题。 谢谢

【问题讨论】:

  • 可能希望至少显示一个小代码片段来说明您是如何阅读网格的?
  • @AlbertD.Kallal 我补充说。谢谢
  • 应该没问题。必须有更多的标记,也许是一个更新的面板,这里缺少一些细节。到目前为止,您发布的内容没有问题。如前所述,此处缺少更新面板或其他一些细节。我会发布网格的标记 - 如果有任何更新面板等,则包括它 - 以及单击时运行上述代码存根的按钮标记。

标签: c# asp.net gridview


【解决方案1】:

好的,这是持久性的问题。

当 GV 被绑定时 - 它还为视图状态以及它如何记住布局设置了一些“东西”。

如果你在绑定之后,添加标题?然后它将显示,但不会持久化(因为它在绑定 + 设置后被更改)。 因此,使用现有布局 - 事实上,您确实会写第一行。

这意味着您需要在绑定过程中添加。

所以,使用 RowCreated 事件。并将您的代码放入该事件中 - 像这样说:

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            GridViewRow Myrow = new GridViewRow(0, 0, DataControlRowType.Header,
                DataControlRowState.Normal);
            TableHeaderCell cell = new TableHeaderCell
            {
                Text = "My cool title",
                ColumnSpan = 5
            };
            Myrow.Controls.Add(cell);
            Myrow.BackColor = ColorTranslator.FromHtml("#3AC0F2");
            Myrow.BorderStyle = BorderStyle.Solid;
            Myrow.BorderColor = Color.Black;
            Myrow.BorderWidth = Unit.Parse("2");

            // heading actauly does not exist yet
            GridView1.Controls[0].Controls.Add(Myrow);
        }
    }

你现在只在 post back = false 时绑定网格。无论如何,尝试上述方法,它应该会持续存在,并且您的第一行现在应该没问题。

【讨论】:

  • 谢谢@AlbertD.Kallal。这解决了这个问题。 @
猜你喜欢
  • 2011-02-04
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多