Скрыть столбцы в DataGridView со списком <> в качестве источника данных? - PullRequest
5 голосов
/ 08 ноября 2011

У меня есть List<> из class X.

X имеет 3 столбца: a, b и c.

Теперь я связываю Список с DataGridView:

dataGrid.DataSource = list;

Как отображать только столбец a и c в GridView, поэтому скрыть столбец b?

Я не буду редактировать сам список, если это возможно, и не буду создавать новый список, если это возможно.

Есть здесь какое-нибудь решение?

Ответы [ 5 ]

9 голосов
/ 09 ноября 2011

Я предполагаю, что ваш класс выглядит следующим образом:

private class MyClass {
  [DisplayName("Foo/Bar")]
  public string FooBar { get; private set; }
  [Browsable(False)]
  public decimal Baz { get; private set; }
  [DisplayName("Baz")]
  public CurrencyBaz
  {
        get { return string.Format(Baz, "C2"); }
  }
}

В приведенном выше коде имена столбцов сетки вида выглядят так:

  • имя столбца1: ("Foo/Bar")
  • имя столбца2: "Baz"
  • имя столбца3: "CurrencyBaz"

если вы не хотите показывать столбец, вы можете просто разместить его следующим образом ... [Browsable (Неверно)]

В приведенном выше коде имя столбца 2 не отображается ......

Надеюсь, это поможет вам ...

6 голосов
/ 08 ноября 2011

Скрытие столбцов будет работать, но может затруднить работу с DataGridView.Я думаю, что вам лучше вообще не добавлять колонки.Для этого мне нравится создавать интерфейс для моего объекта, который отображает только те поля, которые я хочу видеть в моем DataGridView, а затем связывается с интерфейсом вместо объекта.

public interface IMyBindingObject
{
    string A { get; set; }
    string C { get; set; }
}


public class MyObject : IMyBindingObject
{
    public MyObject(string a, string b, string c)
    {
        A = a;
        B = b;
        C = c;
    }
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
}


private void Form1_Load(object sender, EventArgs e)
{
    List<IMyBindingObject> obj = new List<IMyBindingObject>();
    obj.Add(new MyObject("Test A", "Test B", "Test C"));
    obj.Add(new MyObject("T A", "T B", "T C"));

    dataGridView1.AutoGenerateColumns = true;
    dataGridView1.DataSource = obj;
}
3 голосов
/ 08 ноября 2011

Вам потребуется:

dataGrid.AutoGenerateColumns = false;

Затем вам нужно будет добавить столбец для каждого члена класса X и связать их с данными.

0 голосов
/ 06 января 2018

Или скрыть столбцы по имени

dgvEmployees.DataSource = data
dgvEmployees.Columns("Id").Visible = False
dgvEmployees.Columns("ElementEtat").Visible = False
0 голосов
/ 08 ноября 2011

основные вещи, которые вам нужны для этого,

сначала установите для свойства AutoGenerateColumns значение False

dataGrid.AutoGenerateColumns = false;

После этого в RowDataBound Event вы делаете это

protected void dataGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType==DataControlRowType.Header)
            {

                e.Row.Cells[index of the cell to hide].Visible =false;

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...