ASP.Net gridview AutoGenerateColumns="true" 编辑时行中的文本框样式和格式
ASP.Net gridview AutoGenerateColumns="true" style & format textboxes in row when editing
在 AutoGenerateColumns="true"
中使用 GridView 时,似乎没有很多信息。
在我的场景中,我试图使用它,因为我的 GridView 正在动态地从存储过程中提取数值。如您所见,可能有 x 层。
我在查看数据时一切看起来都很棒:
仅查看:
但是,一旦我将该行置于编辑模式,事情就会变成这样:
编辑模式:
我需要在这里做两件事:
- 缩小文本框的宽度
- 格式化数字以删除小数位
我研究了在 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
在 AutoGenerateColumns="true"
中使用 GridView 时,似乎没有很多信息。
在我的场景中,我试图使用它,因为我的 GridView 正在动态地从存储过程中提取数值。如您所见,可能有 x 层。
我在查看数据时一切看起来都很棒:
仅查看:
但是,一旦我将该行置于编辑模式,事情就会变成这样:
编辑模式:
我需要在这里做两件事:
- 缩小文本框的宽度
- 格式化数字以删除小数位
我研究了在 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