如何获得DataRow在DataTable中的行号呢?

first2526 2005-08-15 04:15:04
winform,
在绑定数据的时候,我要按照某个条件来查找以行,用find,但是查找后,得到的DAtaRow[],而没有行号!又没有相应的方法来获取行号,我也不想用循环,用循环可能太慢了如果记录多!

还有,我有一个下拉列表框,其中当前显示的文本要用一个DataTable做绑定,而列表内的内容也需要一个DataTable来做绑定,我如何做呢?

谢谢大家帮忙!
在线等待
...全文
2601 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnjack 2006-06-19
  • 打赏
  • 举报
回复
你的第一個問題,只能用循環了:
/// <summary>
/// Return Id Row-Index of DataView(After setup DataView Sort-Field.)
/// </summary>
/// <param name="dataView">DataView</param>
/// <param name="primaryKeyField">primaryKey[]</param>
/// <param name="primaryKeyValue">primaryKeyValue[]</param>
/// <returns>Exists,return rowIndex;Or else return -1</returns>
public static int FindByViewID(DataView dataView,string[] primaryKeyField,object[] primaryKeyValue)
{
bool isFind=false;
int tmpIndex=-1;
try
{
foreach(DataRowView drv in dataView)
{
tmpIndex++;
for(int i=0;i<primaryKeyField.Length;i++)
{
if(drv[primaryKeyField[i].ToString().Trim()].ToString().Trim().Equals(primaryKeyValue[i].ToString().Trim())) isFind=true;//此時不可以退出循環,因為在多字段主鍵時,有可能有某些字段的值會相同
else
{
isFind=false;
break;
}
}
if (isFind) return tmpIndex;
}
}
catch(Exception ex)
{
// isFind=false;
// tmpIndex=-1;
throw ex;
}
return isFind?tmp
}
第二個問題,用DataRelation來試一下,沒用過
cuijie 2006-02-21
  • 打赏
  • 举报
回复
DataRow r = dt.DefaultView[0].Row;

System.Reflection.FieldInfo fieldInfo = r.GetType().GetField("rowID",System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
int rowID = (int)fieldInfo.GetValue(r);
yeerh 2005-10-21
  • 打赏
  • 举报
回复
string str=@"姓名='张三'";//查询条件
DataRow[] dr=this.dataSet31.Tables["用户表"].Select(str);//先得到符合条件的记录...
int index;
if(dr.Length>0)
{
index = Array.IndexOf(this.dataSet31.Tables["用户表"].Select(),dr[0]);
}
esle index=-1;
还有比这简单的吗?
请各位大侠赐教.......不胜感激.........

first2526 2005-08-15
  • 打赏
  • 举报
回复
呵呵,谢谢楼上的各位
不过没有看明白我的意思,可能。
一个DataTable里面的数据,要绑定到窗口的几个TextBox框和一个下拉列表框。我用TextBox.DataBinding.add("text",datatable,"xh")这样的语句绑定。然后用this.BindingsContext[0].positon ++;来改变绑定位置。如果这样循环下去还可以,关键是我有一个查找功能,就是找到一个符合的条件后,直接将postion定位到那一行。
第二个问题是:我的那个下拉列表框,因为里面的数据是从数据库中提取的,所以需要绑定一个DataTable,而具体显示的内容,是根据第一个DataTable绑定的结果来显示的,所以需要两个绑定,不知道如何做?
tfrtfr 2005-08-15
  • 打赏
  • 举报
回复
1、你既然只要一行,那就去DataRow[]里的第一条记录啦。当然不知道你的业务怎么回事,查出来多条有只要一条,本身就有点矛盾的。
2、不是很简单吗,绑定同一个数据源不就行了,这样都不用做什么处理,就能保持同步了。
3tzjq 2005-08-15
  • 打赏
  • 举报
回复
可通过:
DataRow[] rows = dt.Select();//你得到的DataRow数组
int index = Array.IndexOf(rows,搜索主键值);
以上代码未经测试!也可用DataView,速度更快!

问题2未看懂。
ghostzxp 2005-08-15
  • 打赏
  • 举报
回复
返回一个隐藏列即可
jinjazz 2005-08-15
  • 打赏
  • 举报
回复
只能用sql在查询的时候返回行号

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧