2013-07-05 4 views
0

Я знаю, как установить максимальную длину строки в определенном столбце datagridview, но она изменяется каждый раз, если вводить строку с меньшей длиной. Я хочу чтобы установить длину таким образом, чтобы максимальная длина была установлена ​​только один раз, что в основном является длиной строки.Установить максимальную длину строки конкретного столбца только в первый раз

Например, если длина строки равна 5 в начале, так что даже если я изменить текст строки и длина изменяется на 3 максимальную длину остается 5.

Это мой код.

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     //check if currently selected cell is cell you want 
     if (dataGridView1.CurrentCell == null || dataGridView1.CurrentCell.ColumnIndex != 2) 
     { 
      return; 
     } 

     if (e.Control is TextBox && !(Convert.ToBoolean(this.dataGridView1.CurrentRow.Cells[8].Value.ToString()))) 
     { 
      ((TextBox)e.Control).MaxLength = Convert.ToInt16(this.dataGridView1.CurrentRow.Cells[3].Value.ToString()); 
     } 
    } 
+0

создать логическую переменную как вар isFirstTime = правда; то в вашем коде проверьте if (isFirstTime) и установите максимальную длину и измените этот параметр на false. – Ehsan

ответ

1

создать логическую переменную, как

var isFirstTime =true; 

затем в вашей проверки кода, если (isFirstTime) и установить длину максимального и изменить этот параметр ложь.

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    //check if currently selected cell is cell you want 
    if (dataGridView1.CurrentCell == null || dataGridView1.CurrentCell.ColumnIndex != 2) 
    { 
     return; 
    } 

    if (e.Control is TextBox && !(Convert.ToBoolean(this.dataGridView1.CurrentRow.Cells[8].Value.ToString()))) 
    { 
     if(isFirstTime) 
     { 
     ((TextBox)e.Control).MaxLength = Convert.ToInt16(this.dataGridView1.CurrentRow.Cells[3].Value.ToString()); 
      isFirstTime=false; 
    } 
    } 
} 
+0

Всегда есть разные способы выполнения одной задачи, но это решение лучше, чем тот, который я представил, поскольку он более ясен, и, что более важно, он уменьшит количество операций (1, если вместо 2) хорошая работа – user2497624

0

Что происходит в вашем коде, так это то, что вы определяете зависимость максимальной длины от длины строки. В этом случае вам нужно добавить в оператор if инструкцию. Первым, если будет encompassethe второй, если ваш код и вот его состояние

if ((TextBox)e.Control).MaxLength >= Convert.ToInt16(this.dataGridView1.CurrentRow.Cells[3].Value.ToString()) 

Этот код позволит вам увеличить размер вашего MAXLENGTH. Второй, если будет вложен в ваш второй, если вот его код.

if ((TextBox)e.Control).MaxLength < Convert.ToInt16(this.dataGridView1.CurrentRow.Cells[3].Value.ToString()) 

, если это правда, что вы не делаете ничего, вы применить определение длины максимум у вас есть

((TextBox)e.Control).MaxLength = Convert.ToInt16(this.dataGridView1.CurrentRow.Cells[3].Value.ToString()); 

это позволит предотвратить укорочение MAXLENGTH

+0

Проблема в том, что я уже установил максимальное число до 130 всех строк, но есть несколько строк, максимальная длина которых совпадает с их длиной строки в начале. :( – soldiershin

+0

Прошу прощения, я в замешательстве. максимальная длина вашей ячейки равна 130, но некоторые ячейки должны иметь максимум, который меньше этого? В любом случае, посмотрите на ответ Элхсана, он лучше моего, и он может позволить вам определить максимум до начала (130), а затем адаптируйте свой макс к длине первой введенной строки – user2497624

Смежные вопросы