Как я могу добавить текст в мои заголовки строк в представлении данных, C #? - PullRequest
1 голос
/ 29 февраля 2012

Здесь есть много вопросов, касающихся этой проблемы, но я попробовал опубликованные решения и до сих пор не могу заставить его работать.

У меня есть сетевое представление, в котором я хочу показать число в заголовках строк. Вот что я попробовал:

 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 голосов
/ 29 февраля 2012

используя вид сетки, вы можете обнаружить в событии OnRowDataBound, если это строка заголовка, например, так:

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";
            }
        }

Это событие возникает, когда сетка привязывает данные.Он будет срабатывать для каждой связанной строки данных, а также строк верхнего и нижнего колонтитула.

ТАК вы будете вызывать DataGridView1.Databind () во время события Page_Load, наиболее вероятно, и это будет вызывать событие OnRowDataBound несколько раз.

0 голосов
/ 29 февраля 2012

Я думаю, что мой подход заключается в том, чтобы связать строку в событии 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();
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...