在下一个示例中,我如何知道当前行索引?
foreach (DataRow temprow in temptable.Rows)
{
//this.text = temprow.INDEX????
}
答案 0 :(得分:21)
你必须自己创建一个
var i = 0;
foreach (DataRow temprow in temptable.Rows)
{
this.text = i;
// etc
i++;
}
或者你可以做一个for循环。
答案 1 :(得分:16)
我在MiscUtil中有一个类型可以帮助解决这个问题 - SmartEnumerable
。这是一个愚蠢的名字,但它的工作原理:)请参阅usage page了解详情,如果你使用的是C#3,你可以更简单:
foreach (var item in temptable.Rows.AsSmartEnumerable())
{
int index = item.Index;
DataRow value = item.Value;
bool isFirst = item.IsFirst;
bool isLast = item.IsLast;
}
答案 2 :(得分:13)
如果你可以使用Linq,你可以这样做:
foreach (var pair in temptable.Rows.Cast<DataRow>()
.Select((r, i) => new {Row = r, Index = i}))
{
int index = pair.Index;
DataRow row = pair.Row;
}
答案 3 :(得分:5)
你实际上不这样做。 foreach的一个美女是你没有额外的代码处理集来增加和检查长度。
如果你想拥有自己的索引,你必须做这样的事情
int rowindex = 0;
foreach (DataRow temprow in temptable.Rows)
{
//this.text = temprow.INDEX????
this.text = rowindex++;
}
答案 4 :(得分:2)
int rowIndex = temptable.Rows.IndexOf(temprow);
答案 5 :(得分:1)
使用标准的foreach循环是不可能的。最简单的方法是使用for循环
for ( int i = 0; i < temptable.Rows.Count; i++ ) {
DataRow temprow = (DataRow)temptable.Rows[i];
...
}
另一种选择是使用扩展方法
public static void ForEachIndex<T>(this IEnumerable<T> e, Action<T,int> del) {
var i = 0;
foreach ( var cur in e ) {
del(cur,i);
}
}
...
temptable.Rows.Cast<DataRow>.ForEachIndex((cur,index)
{
...
});
答案 6 :(得分:1)
嘿,我认为有一种更快的方式。不需要迭代! 首先,为DataRow的Friend RowID字段声明一个静态变量:
Private Shared RowIDFieldInfo As System.Reflection.FieldInfo = GetType(DataRow).GetField("_rowID", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
然后你需要做的就是:
RowIDFieldInfo.GetValue(MyDataRow) - 1
我没有在求助或过滤后对此进行测试。 在我的情况下,我没有必要这样做,所以这是有效的。
答案 7 :(得分:1)
迟到总比不上......
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import Qt.labs.settings 1.0
Window {
Component.onCompleted: {
openDialog.open();
}
FileDialog {
id: openDialog
selectFolder: true
Component.onCompleted: folder = settings.lastFolderURL;
onVisibleChanged:
{
console.log("lastFolder as string " + settings.lastFolderString);
console.log("lastFolder as URL " + settings.lastFolderURL);
}
onAccepted:
{
console.log("Selected folder : " + folder)
settings.lastFolderString = folder;
settings.lastFolderURL = folder;
}
}
Settings {
id: settings
property string lastFolderString ;
property url lastFolderURL;
}
}
答案 8 :(得分:1)
输入任何单元格编号并获取RowIndex
foreach (var item in datagridview.Rows)
{
//TextBox1.Text= item.Cells[0].RowIndex.ToString();
}
答案 9 :(得分:0)
使用for循环,或使用整数:
int count =0;
foreach (DataRow temprow in temptable.Rows)
{
//count is the index of the row in the array temptable.Rows
//this.text = temprow.INDEX????
++count;
}
答案 10 :(得分:0)
您可以使用标准for
循环来获取索引
for(int i=0; i<temptable.Rows.Count; i++)
{
var index = i;
var row = temptable.Rows[i];
}
答案 11 :(得分:0)
虽然LFSR的答案是正确的,但我很确定几乎任何集合/列表都会调用.IndexOf来枚举列表,直到找到匹配的行。对于大型DataTable,这可能很慢。
对于表格上的(i = 0; i&lt; temptable.Rows.Count; i ++){...}可能更好。这样你就可以获得索引,而无需征收索引税。
答案 12 :(得分:0)
使用索引而不是使用列名来检索数据的另一种方法
foreach (DataRow temprow in temptable.Rows)
{
String col1 = temprow[0].ToString().Trim();
String col2 = temprow[1].ToString().Trim();
}
希望有帮助