ASP.Net gridview AutoGenerateColumns =“true”style&编辑时格式化行中的文本框

时间:2017-07-24 15:52:49

标签: c# gridview autogeneratecolumn

使用带AutoGenerateColumns="true"的GridView时似乎没有太多信息。

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

在查看数据时,我看起来很棒:

仅查看:

enter image description here

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

编辑模式:

enter image description here

我需要在这里做两件事:

  1. 使TextBoxes的宽度更小
  2. 格式化数字以删除小数
  3. 我已经研究了DataControlFieldDataControlFieldCell内的GridView行内的所有控件的循环,但是我已经非常困惑地请求每个人的帮助。

    我的代码背后是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;
                    }
                }
            }
        }
    

3 个答案:

答案 0 :(得分:0)

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

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

并且,为了删除小数,请在数据库中使用integer数据类型;

答案 1 :(得分:0)



#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>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

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

    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