如果DataGrid经过排序,其顺序与DataTable中的RowIndex就对应不上了,此时如果需要从DataGrid 的当前行得到数据源DataTable中对应的行,该怎么办?相反如果DataTable.Select 得到某行,想让DataGrid中对应的行自动选中,又该怎么办?
2.0的 DataGridView 更好
2.0的 DataGridView 更好
解决方案 »
- HtmlElement.InvokeMember("click") 在程序当中没反应
- winform中是否可以嵌入office或者wps
- 如何在C#中使用DLL中返回的数组指针
- 请帮忙修改下面的语法
- 一个简单的例子错误查找
- 急!!!新增记录时怎么根据一个字段的输入值,按百分比算出其他值???
- 有<<数据结构与算法>>C#版 的书吗?
- 怎么将一个STRING里所有的一对<>中的东西全部删除?包括<>
- 在windows server 2003安装中.net要更新哪些组件
- 《Microsoft.NET程序设计技术内幕》这本书怎么样??
- 不用Session, 如何知道父页面的名称?
- 请教 ,如何在单击button 时弹出 ContextMenu ?
=========================
取出DataGrid当前行对应的DataTable的值。
//
//DataRowView drv = (DataRowView)this.BindingContext[this.ds,this.ds.Tables[0].TableName].Current;
DataRowView drv = (DataRowView)this.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.Memeber].Current;
获取到drv就可以改数据,
DataRow dw = drv.Row; // 得到DataRow,
DataTable dt = dw.Table;//得到DataTable
DataSet ds = dt.DataSet;//得到DataSet
====================
有问题的话我在blog写过一些文章,
http://blog.csdn.net/zhzuo
http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp
一个就是用dataview 帮定,然后从dataview中取数据。
或者通过BindingManagerBase
DataRow dr = DataTable.Rows[datesetRowNumber];
第二个问题还是没什么好办法,希望大侠再指点一下!!
-----------------------------------------------------------------------------如果DataTable.Select 得到某行,想让DataGrid中对应的行自动选中,又该怎么办?==============================================================================
如下:
private void button3_Click(object sender, System.EventArgs e)
{
DataRow [] drs = this.dbCategories.Select("CategoryID < 5");
CurrencyManager currencyManager = (CurrencyManager)this.BindingContext[this.dataGrid1.DataSource,this.dataGrid1.DataMember];
//for(int i = 0;i < dataGrid1.VisibleRowCount;i++)
for(int i = 0;i < currencyManager.Count;i++)
{
DataRowView drv = (DataRowView)currencyManager.List[i];
DataRow dr = drv.Row;
if(Array.IndexOf(drs,dr) != -1)
{
this.dataGrid1.Select(i);
}
}
}
楼主这个问题也是我想问的。
对列排序后,this.BindingContext[DataSetName,"TableName"].Position=?帮楼主顶!
不要选择dataMember,然后对dataGrid1绑定到dataView上,也就是
DataView mdv=dt1.Tables["person"].DefaultView;
dataGrid1.DataSource=mdv;
dataGrid1的行号ataGrid1.CurrentCell.RowNumber和cm.Position相等
DataRow [] drs = this.dataset.Tables[0].Select("age<60");
DataView mdv=(DataView)dataGrid1.DataSource;
foreach(DataRow rw in drs)
{
for(int i=0;i<cm.Count;i++)
{
DataRow dr=mdv[i].Row;
if(dr==rw)
{
dataGrid1.Select(i);
break;
}
}//endfor
}//endforeach
dataGrid1.Focus();
不过那样有点画蛇添足的味道,不如直接判断
DataView mdv=(DataView)dataGrid1.DataSource;
for(int i=0;i<cm.Count;i++)
{
if(int.Pase(mdv[i]["age"].ToString())<60)
dataGrid1.Select(i);
}
dataGrid1.Focus();