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

C# 仅在第一次设置特定列行的最大长度,c#,.net,datagridview,C#,.net,Datagridview,我知道如何在datagridview的特定列中设置行的最大长度,但如果输入长度较短的字符串,则每次都会更改。我希望设置长度,使最大长度一开始只设置一次,基本上就是字符串的长度 例如,如果字符串的长度在开始时为5,那么即使我更改字符串文本,并且长度更改为3,最大长度仍然为5 这是我的密码 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEvent

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

创建一个布尔变量作为

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

代码中发生的事情是根据字符串的长度定义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())

这将防止maxlength缩短

创建一个布尔变量,如var isFirstTime=true;然后在代码中检查if(isFirstTime),并将max length设置为false。执行同一任务的方法总是不同的,但此解决方案比我提交的解决方案更好,因为它更清晰,更重要的是,它将减少操作数(1 if而不是2 if)问题是我已经将所有字符串中的最大长度数设置为130,但有些字符串的最大长度与开头的字符串长度相同:(很抱歉,我弄糊涂了。所以您希望单元格的最大长度为130,但有些单元格的最大长度必须小于该值??无论如何,请看Elhsan的答案,它比我的答案好,它可以让您在开始之前定义最大长度(130),然后根据输入的第一个字符串的长度调整最大长度
  ((TextBox)e.Control).MaxLength = Convert.ToInt16(this.dataGridView1.CurrentRow.Cells[3].Value.ToString());