2016-06-14 5 views
1

Мне нужно показать некоторые тексты на DataGridViewButtonColumn. Я прочитал много подобных вопросов об этом на SO. Многие из них рекомендуют установить UseColumnTextForButtonValue на номер True, который не для меня. Кажется странным, что Microsoft делает его как минимум row так, чтобы кнопка отображала текст.C# datagridviewbuttoncolumn no text show

Ниже мой код:

 DataGridViewButtonColumn EditColumn = new DataGridViewButtonColumn(); 
     EditColumn.HeaderText = "Complete"; 
     EditColumn.Name = "Complete"; 
     EditColumn.UseColumnTextForButtonValue = True; 
     dataGridView.Columns.Add(EditColumn); 

Этот код Безразлично не показывать текст на DataGridViewButtonColumn:

Код, который работает здесь:

 dataGridView1.ColumnCount = 2; 
     dataGridView1.Columns[0].Name = "a"; 
     dataGridView1.Columns[1].Name = "b"; 

     ArrayList row = new ArrayList(); 
     row.Add("1"); 
     row.Add("2"); 
     dataGridView1.Rows.Add(row.ToArray()); 

     DataGridViewButtonColumn btn = new DataGridViewButtonColumn(); 
     btn.Name = "text"; 
     btn.UseColumnTextForButtonValue = true; 
     dataGridView1.Columns.Add(btn); 

Этот код работает, но однако Я получаю данные из базы данных, и поэтому я не буду использовать dataGridView.Rows.Add(row.ToArray()) здесь. Итак, как мне получить текст для отображения на DataGridViewButtonColumn?

+0

Проверьте [это переполнение стека] (http://stackoverflow.com/questions/30256811/datagridview-button-text-not-appearing-despite-usecolumntextforbuttontext-set-to) –

+0

См. [Здесь] (https: // social.msdn.microsoft.com/Forums/windows/en-US/64110c71-aa5c-40b4-a22f-ed800c603392/showing-text-on-the-buttons-in-datagridviewbuttoncolumn-c?forum=winformsdatacontrols), как это сделать связывание. – TaW

ответ

1

У вас есть две проблемы решить:

  • Как связываютButton колонки к DataSource
  • Как делают DataSource создавать не только по умолчанию типов столбцов, но и один (или более) Кнопка колонки

enter image description here

Первый вопрос в основном решается установкой DataPropertyName столбца.

Но я не знаю, как или даже если можно влиять на ColumnTypes, созданный автоматически.

Поэтому я предлагаю обходной путь: вместо того, чтобы полагаться на AutoGenerateColumns мы можем сделать это сами в маленькой вспомогательную функцию:

Это очищает столбцы и создает новый для каждого столбца в DataTable, используя свойства столбцов в таблице. Для того, чтобы сказать ему, какой столбец (ы) мы хотим быть кнопки мы передаем строку с именами столбцов, окружен пробелами:

void CreateSpecialColumns(DataTable dt, DataGridView dgv, string buttons) 
{ 
    dgv.Columns.Clear(); 

    for (int i = 0; i < dt.Columns.Count; i++) 
    { 
     DataColumn dc = dt.Columns[i]; 
     if (buttons.Contains(" " + dc.ColumnName + " ")) 
     { 
      DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn(); 
      buttonColumn.HeaderText = dc.Caption; 
      buttonColumn.Name = dc.ColumnName; 
      buttonColumn.ValueType = dc.DataType; 
      buttonColumn.DataPropertyName = dc.ColumnName; 
      dgv.Columns.Add(buttonColumn); 
     } 
     else 
     { // normal columns 
      int c = dgv.Columns.Add(dc.ColumnName, dc.Caption); 
      dgv.Columns[c].ValueType = dc.DataType; 
      dgv.Columns[c].DataPropertyName = dc.ColumnName; 
     } 
    } 
} 

Вот как я назвал его помощью DataTable DT:

dataGridView1.AutoGenerateColumns = false; 
CreateSpecialColumns(DT, dataGridView1, " Cook Waiter ", ""); 
dataGridView1.DataSource = DT; 

Обратите внимание, что это работает только если свойство UseColumnTextForButtonValue равно не установлено в true!