繁体   English   中英

如何在C#的datagridview中将文本添加到行标题中?

[英]How can I add text to my rowheaders in a datagridview, C#?

这里有很多与此问题有关的问题,但是我尝试过发布的解决方案,但仍然无法正常工作。

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

 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事件中调用的,因为在其他问题中,该代码不应在构造函数中运行。

忠告? 谢谢!

我认为我的方法是在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();
      }
    }

使用网格视图,您可以在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事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM