ASP.Net gridview AutoGenerateColumns="true" 编辑时行中的文本框样式和格式

ASP.Net gridview AutoGenerateColumns="true" style & format textboxes in row when editing

AutoGenerateColumns="true" 中使用 GridView 时,似乎没有很多信息。

在我的场景中,我试图使用它,因为我的 GridView 正在动态地从存储过程中提取数值。如您所见,可能有 x 层。

我在查看数据时一切看起来都很棒:

仅查看:

但是,一旦我将该行置于编辑模式,事情就会变成这样:

编辑模式:

我需要在这里做两件事:

  1. 缩小文本框的宽度
  2. 格式化数字以删除小数位

我研究了在 GridView 行内、DataControlField 内、DataControlFieldCell 内循环遍历所有控件,但我已经很困惑了,请求大家的帮助。

我后面的代码是用 C# 写的。

编辑:

好的,为了更清楚,我正在尝试单击编辑(M 按钮)将该行置于编辑模式。从这里开始,我想遍历行中的所有控件,然后设置 TextBox 宽度。这些方面的东西(这不是工作代码,只是我在乱搞):

protected void gvFeeTable_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gvFeeTable.EditIndex = e.NewEditIndex;
        BindFeeTableGrid(9);

        //foreach (DataControlField field in gvFeeTable.Columns)
        //{
        //    field.ControlStyle.Width = 25;
        //}

        foreach (Control c in gvFeeTable.Rows[gvFeeTable.EditIndex].Controls)
        {
            //if (c is TextBox)
            //{
            //    TextBox tb = c as TextBox;

            //    tb.Width = 25;
            //}

            string test = c.GetType().ToString();

            if (c.GetType() == typeof(DataControlFieldCell))
            {                    

                foreach (TextBox tb in c.Controls)
                {
                    tb.Width = 50;
                }
            }
        }
    }

例如,我想在 C# 代码中设置第 3 列的宽度:您可以为所有其他列执行此操作。

GridView1.Columns[2].ItemStyle.Width = 20;

并且,要删除小数,请使用数据库中的 integer 数据类型;

#gvSomeGridView1 .inpA{ width: 20px;}
#gvSomeGridView1 .inpB{ width: 40px;}
#gvSomeGridView1 .inpC{ width: 80px;}

#gvSomeGridView2 td:nth-child(1) input{ width: 30px;}
#gvSomeGridView2 td:nth-child(2) input{ width: 60px;}
#gvSomeGridView2 td:nth-child(3) input{ width: 120px;}

#gvSomeGridView3 td > input { width:50px}
<div>
  <table id="gvSomeGridView1">
    <tbody>
      <tr>
        <td><input id="input1" type="text" class="inpA" /></td>
        <td><input id="input2" type="text" class="inpB" /></td>
        <td><input id="input3" type="text" class="inpC" /></td>
      </tr>
    </tbody>
  </table>
</div>

<div>
  <table id="gvSomeGridView2">
    <tbody>
      <tr>
        <td><input id="input1" type="text"/></td>
        <td><input id="input2" type="text"/></td>
        <td><input id="input3" type="text"/></td>
      </tr>
    </tbody>
  </table>
</div>

<div>
  <table id="gvSomeGridView3">
    <tbody>
      <tr>
        <td><input type="text"/></td>
        <td><input type="text"/></td>
        <td><input type="text"/></td>
      </tr>
    </tbody>
  </table>
</div>

只是想 post 我的设置文本框大小的解决方案...并添加我的代码以完成格式化:

    protected void gvFeeTable_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gvFeeTable.EditIndex = e.NewEditIndex;
        BindFeeTableGrid(9);

        foreach (Control c in gvFeeTable.Rows[gvFeeTable.EditIndex].Controls)
        {
            if (c.GetType() == typeof(DataControlFieldCell))
            {
                foreach (Control control in c.Controls)
                {
                    TextBox tb = control as TextBox;

                    if (tb != null)
                    {
                        tb.Width = 50;

                        double dbl;
                        bool isNumeric = double.TryParse(tb.Text, out dbl);

                        if (isNumeric == true)
                        {
                            tb.Text = Convert.ToDecimal(tb.Text).ToString("0.00");
                        }
                    }
                }
            }
        }
    }

Textboxes resized

Textboxes formatted