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());
        }
    }
4

2 回答 2

1

创建一个布尔变量为

    var isFirstTime =true; 

然后在您的代码中检查 if(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;
    }
    }
}
于 2013-07-05T12:01:36.867 回答
0

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

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

此代码将阻止您增加 maxlength 的大小。第二个 if 将嵌套在您的第二个 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

于 2013-07-05T12:02:35.763 回答