【发布时间】:2012-03-07 18:00:35
【问题描述】:
我想知道如何从 gridview 中获取列名?按其编号而不是名称。 比如:姓名|年龄|生日:(所以姓名=0,年龄=1等...)
谢谢。
【问题讨论】:
我想知道如何从 gridview 中获取列名?按其编号而不是名称。 比如:姓名|年龄|生日:(所以姓名=0,年龄=1等...)
谢谢。
【问题讨论】:
你可以这样得到它:
gv.HeaderRow.Cells[i].Text
或者像这样:
gv.Rows[0].Cells[i].Text
Rows[0] 应该是您的标题行。
【讨论】:
//// Header column names
int gridViewCellCount = yourGridView.Rows[0].Cells.Count;
// string array to hold grid view column names.
string[] columnNames = new string[gridViewCellCount];
for (int i = 0; i < gridViewCellCount; i++)
{
columnNames[i] = ((System.Web.UI.WebControls.DataControlFieldCell)(yourGridView.Rows[0].Cells[i])).ContainingField.HeaderText;
}
【讨论】:
简单
GridView1.Rows[0].Cells[0].Text;
如果你想要每一行的所有单元格值,试试这个
foreach (GridViewRow r in GridView1.Rows)
{
string s = r.Cells[0].Text;
string y = r.Cells[1].Text;
}
更新:
试试这个
foreach (TableCell Tc in GridView1.HeaderRow.Cells)
{
//if you are not getting value than find childcontrol of TabelCell.
string sssb = Tc.Text;
foreach (Control ctl in Tc.Controls)
{
//Child controls
Label lb = ctl as Label;
string s = lb.Text;
}
}
【讨论】:
重新审视这个老问题.... 可以使用这种代码获取绑定到 GridView 的数据的字段名称。这将创建一个包含列号和字段名称的字典。
private static IDictionary<int, string> GetGridViewFieldNames(object grid)
{
var names = new Dictionary<int, string>();
var view = grid as GridView;
if (view != null) {
for (var i = 0; i < view.Columns.Count; i++) {
var field = view.Columns[i] as BoundField;
if (field != null) {
names.Add(i, field.DataField);
}
}
}
return names;
}
【讨论】:
这不是问题的答案。如果您从不更改网格视图中的标题文本,这只是答案。提问者想通过索引获取数据库字段名。
我见过一些“答案”,它们只提供网格视图的选定行中的文本,或者标题文本都没有回答所提出的问题......
你可能会问为什么?如果您要对系统中的更新进行审核,并且想要比较旧值和新值,并且仅在它们发生更改时更新并希望指示哪个字段已更新,您如何显示数据库表字段名称 在循环的索引处。
例如:
Protected Sub gv_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs)
Dim intValCount As Integer = Integer.Parse(e.NewValues.Count)
If intValCount > 0 Then
Dim i As Integer = 0
For i = 0 To intValCount - 1
If Not e.OldValues(i).Equals(e.NewValues(i)) Then
' values have changed, audit the change
Sys.Audits.General(intID, "the_database_table", <the table field by index(i)>, e.OldValues(i).ToString, e.NewValues(i).ToString)
End If
i += 1
Next
End If
End Sub
所以问题是如何通过后面的代码通过索引获取数据库表字段名称?我也一直在寻找这个,我所看到的所有“答案”并不是我认为我们中的一些人真正在寻找的答案。我在这里看到的所有提到的方法都不是对数据库表字段名称的防弹引用。
【讨论】:
很简单:在这里,我读取了每个标题单元格的 gridview 标题文本,并将它们作为新列添加到数据表中。
DataTable dt = new DataTable();
foreach(DataControlFieldHeaderCell column in yourGridview.HeaderRow.Cells)
{
dt.Columns.Add(column.Text.Trim().Replace(" ", ""));
}
//Make sure you do all this after yourGridview.DataBind();
//If you do not want to bind data first simply bind an empty list like so:
/* yourGridview.DataSource = new List<string>();
yourGridview.DataBind(); */
【讨论】: