使用两个 headers 从 gridview 读取
Reading from gridview with two headers
我正在使用 ASP.NET 和 C#。我有 GridView
并且需要两个 header。所以我用下面的代码在数据绑定后又加了一个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 处添加了新的 header,它删除了第一行。但在 GUI 中,第一行存在。我试着做 AddAt(-1, row)
但那会把它添加到 gridView
.
的底部
关于如何解决这个问题有什么建议吗?
如果我需要进一步澄清我的问题,请告诉我。
谢谢
好的,这是坚持的问题
绑定 GV 时 - 它还会为视图状态设置一些“东西”以及它如何记住布局。
如果您在绑定后添加 header?然后它会显示,但不会持久化(因为它在绑定 + 设置后已更改)。
因此,使用现有布局 - 实际上,您确实会写完第一行。
这意味着您需要在绑定过程中添加。
因此,使用 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 上绑定网格。不管怎样,试试上面的方法,它应该会持续存在,你的第一行现在应该没问题了。
我正在使用 ASP.NET 和 C#。我有 GridView
并且需要两个 header。所以我用下面的代码在数据绑定后又加了一个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 处添加了新的 header,它删除了第一行。但在 GUI 中,第一行存在。我试着做 AddAt(-1, row)
但那会把它添加到 gridView
.
关于如何解决这个问题有什么建议吗? 如果我需要进一步澄清我的问题,请告诉我。 谢谢
好的,这是坚持的问题
绑定 GV 时 - 它还会为视图状态设置一些“东西”以及它如何记住布局。
如果您在绑定后添加 header?然后它会显示,但不会持久化(因为它在绑定 + 设置后已更改)。 因此,使用现有布局 - 实际上,您确实会写完第一行。
这意味着您需要在绑定过程中添加。
因此,使用 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 上绑定网格。不管怎样,试试上面的方法,它应该会持续存在,你的第一行现在应该没问题了。