我正在尝试编写一个小方法来循环并通过其索引查找GridView
列,因为它可以根据可见的内容更改位置。
这是我到目前为止所做的:
private int GetColumnIndexByName(GridView grid, string name)
{
foreach (DataColumn col in grid.Columns)
{
if (col.ColumnName.ToLower().Trim() == name.ToLower().Trim()) return col.Ordinal;
}
return -1;
}
在这种情况下,DataColumn似乎不是正确使用的类型,但我对于我应该在这里做什么感到很遗憾。
我只能使用.NET 2.0 / 3.5。我不能用4.0。
答案 0 :(得分:34)
我想通了,我需要使用DataControlField
并略有不同的语法。
工作版本:
private int GetColumnIndexByName(GridView grid, string name)
{
foreach (DataControlField col in grid.Columns)
{
if (col.HeaderText.ToLower().Trim() == name.ToLower().Trim())
{
return grid.Columns.IndexOf(col);
}
}
return -1;
}
答案 1 :(得分:17)
我更喜欢收集迭代,但在这种情况下,为什么要担心foreach
和grid.Columns.IndexOf
调用的开销呢?只需使用索引遍历数组。
private int GetColumnIndexByName(GridView grid, string name)
{
for(int i = 0; i < grid.Columns.Count; i++)
{
if (grid.Columns[i].HeaderText.ToLower().Trim() == name.ToLower().Trim())
{
return i;
}
}
return -1;
}
答案 2 :(得分:2)
更好的解决方案适用于Datafield,SortExpression和headerText。
public static int GetBoundFieldIndexByName(this GridView gv,string name)
{
int index = 0;
bool found = false;
foreach (DataControlField c in gv.Columns)
{
if (c is BoundField)
{
BoundField field = (BoundField)c;
if (name == field.DataField ||
name == field.SortExpression ||
name == field.HeaderText)
{
found = true;
break;
}
}
index++;
}
return found ? index : -1;
}
答案 3 :(得分:0)
这样,对我有用(.NET Gridview):
private int GetColumnIndexByName(GridView grid, string name)
{
for (int i = 0; i < grid.HeaderRow.Cells.Count; i++)
{
if (grid.HeaderRow.Cells[i].Text.ToLower().Trim() == name.ToLower().Trim())
{
return i;
}
}
return -1;
}
答案 4 :(得分:0)
<head>
</head>
<body>
<img id="uparrow" src="uparrow.png" alt="Up" onclick="myfunction()">
<p id="incremented"></p>
<script>
var incremented = 0;
function myfunction() {
document.getElementById("incremented").innerHTML = ++incremented;
}
</script>
</body>
答案 5 :(得分:0)
如果您需要一个列本身而不仅仅是它的索引,您可以使用一些Linq魔法:
DataControlField col=GridView1.Columns.Cast<DataControlField>().First(c => c.HeaderText == "Column_header")
答案 6 :(得分:0)
这是VB版本
Protected Function GetColumnIndexByHeaderText(grid As GridView, findHeader As String) As Integer
Dim i As Integer = 0
For i = 0 To grid.Columns.Count - 1
If grid.Columns(i).HeaderText.ToLower().Trim() = findHeader.ToLower().Trim() Then
Return i
End If
Next
Return -1
End Function