仅在第一次设置特定列的行的最大长度

时间:2013-07-05 11:53:38

标签: c# .net datagridview

我知道如何在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());
        }
    }

2 个答案:

答案 0 :(得分:1)

创建一个布尔变量

    var isFirstTime =true; 

然后在你的代码中检查是否(isFirstTime)并设置你的最大长度并将此参数更改为false。

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

答案 1 :(得分:0)

您的代码中发生的是您根据字符串的长度定义maxlength基础。在这种情况下,您需要在代码中添加if语句。第一个if将包含第二个if代码,这是它的条件

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

此代码将阻止您增加maxlength的大小。 第二个if将嵌套在你的第二个中,如果这是它的代码。

  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