如何在datagridview C#中向我的rowheader添加文本?

时间:2012-02-29 11:23:53

标签: c# .net winforms datagridview row

这里有很多关于这个问题的问题,但我已经尝试过发布的解决方案,但仍然没有让它发挥作用。

我有一个datagridview,我想在行标题上显示rownumber。 这就是我的尝试:

 gridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;           
            gridView.AutoResizeRowHeadersWidth(
                DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders);


            foreach (DataGridViewRow row in gridView.Rows)
            {
                row.HeaderCell.Value = (row.Index + 1).ToString();
            }

此代码是从OnLoad事件调用的,因为在其他问题中声明代码不应该在构造函数中运行。

么?谢谢!

2 个答案:

答案 0 :(得分:0)

我认为我的方法是在ItemDataBound事件上绑定一行,而不是在一个地方遍历行。有点像:

    /// <summary>
    /// Which row is currently being rendered
    /// </summary>
    protected int RowIndex { get; set; }

    protected override void OnLoad(EventArgs e)
    {      
      this.RowIndex = 0;
      this.DataGrid.DataSource = new string[] { "a", "b", "c" }; // bind the contents
      this.DataGrid.DataBind();      
    }

    /// <summary>
    /// When an item is bound
    /// </summary>
    protected void OnItemDataBound(object sender, DataGridItemEventArgs e)
    {
      this.RowIndex++;
      Label label = e.Item.FindControl("RowLabel") as Label;
      if (label != null)
      {
        label.Text = this.RowIndex.ToString();
      }
    }

答案 1 :(得分:0)

使用网格视图,您可以在OnRowDataBound事件中检测到这是否是Header行,如下所示:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                Label label = e.Row.FindControl("RowLabel") as Label;
               label.Text = "the text i want";
            }
        }

当网格数据绑定时,此事件将触发。它将触发绑定的每一行数据以及页眉和页脚行。

因此,您最有可能在Page_Load事件期间调用DataGridView1.Databind(),这将多次触发OnRowDataBound事件。