void DataProvider_Realtime( REALTIMEDATAINFO realtimeInfo ,object originalInfo ) { var objParams = new object[vtName.Count]; for( var i =0 ; i<vtName.Count ; i++) { objParams[i] = norlib.Tools.GetMemberValue(realtimeInfo, vtName[i]); } dataTbl.Rows.Add(objParams ); }
绑定的地方就是 private void _InitDataView() { var tpRealtimeInfo = typeof(REALTIMEDATAINFO); var fields = tpRealtimeInfo.GetFields(); vtName.Clear(); var arrDataTblKey = new DataColumn[1]; foreach (var field in fields) { foreach (Attribute attr in field.GetCustomAttributes(true)) { var attrDesc = attr as DescriptionAttribute; if (null == attrDesc) continue; var desc = attrDesc.Description; var column = new DataGridViewTextBoxColumn(); column.HeaderText = desc; dataGridView1.Columns.Add(column); var datatblColumn = new DataColumn(desc, field.FieldType); dataTbl.Columns.Add(datatblColumn); vtName.Add(field.Name); } } dataGridView1.DataSource = dataTbl; }
你是怎么绑定的???上代码
void DataProvider_Realtime( REALTIMEDATAINFO realtimeInfo ,object originalInfo )
{
var objParams = new object[vtName.Count];
for( var i =0 ; i<vtName.Count ; i++)
{
objParams[i] = norlib.Tools.GetMemberValue(realtimeInfo, vtName[i]);
}
dataTbl.Rows.Add(objParams );
}
{
var tpRealtimeInfo = typeof(REALTIMEDATAINFO);
var fields = tpRealtimeInfo.GetFields();
vtName.Clear();
var arrDataTblKey = new DataColumn[1];
foreach (var field in fields)
{
foreach (Attribute attr in field.GetCustomAttributes(true))
{
var attrDesc = attr as DescriptionAttribute;
if (null == attrDesc)
continue;
var desc = attrDesc.Description;
var column = new DataGridViewTextBoxColumn();
column.HeaderText = desc;
dataGridView1.Columns.Add(column);
var datatblColumn = new DataColumn(desc, field.FieldType);
dataTbl.Columns.Add(datatblColumn);
vtName.Add(field.Name);
}
}
dataGridView1.DataSource = dataTbl;
}
另外开一个线程处理, 能否大致说一下.
因为现在就一句话:dataGridView1.DataSource = dataTbl;
我不知道怎么绑定到另外的线程
谢谢
dataGridView1.DataBind();
dataGridView1.DataBind();
1.取数据的时候 那就优化SQl语句
2.走你绑定的方法的时候 那就优化算法 lz这里的问题可能出在两层forearch循环上了
把能提到这个循环外面的东西 都在外面搞 甚至可以通过方法级的变量
foreach (var field in fields)
{
foreach (Attribute attr in field.GetCustomAttributes(true))
{3.在获取到数据绑定到GridView上的这下慢 那可能就是你设置的gridview的属性的问题 把GridView的行、列自适应都给设置为False
开线程我会,现在的问题是:
1.我是否应该在 新线程中获得数据,然后在新线程中把数据添加入DataTable
可是我一旦添加入DataTable, 似乎DataGridView就自动更新,然后数据一多久假死了.2.当数据更新的时候,就是具有同一个PrimaryKey的时候, 如何更新数据, 而不是使用 DataTable.Rows.Add( newdata )
我发现使用 Add函数总是添加了一条新纪录,而不是更新.
我感到很困惑!
谢谢.
非常感激您的回复.
InitDataView() 只会调用一次,主要是初始化DataTable和DataGridView
我试一下修改自适应为false
楼主,确认一哈??!!
嗯,数据绑定我只在 _InitDataView() 中做了一次 , 而 _InitDataView() 也只是被构造函数调用了一次, 反正就调用了一次绑定 DataSource
dt.BeginLoadData();
然后设定一个时间间隔来刷新界面,调用如下方法:
dt.EndLoadData();关于DataTable中数据如何更新中的数据更新,必须手动设置主键属性,然后直接用Add方法添加记录,那样就会自动识别是否主键存在,主键存在的情况下就会把原行内容修改。不可能出现你的那种情况,因为主键的存在,如果添加新纪录,会造成主键冲突,这是逻辑错误。
注:Sandy945应该没用过DataTable,不然怎么连“dataTable.Rows.Add 始终是新增行”的错误都会出现???
会假死的原因,我想了很多次。结合有些异常,有时候假死,
很多情况是获取数据时,我同时点击DataGridView,或者拉动滚动条,会出现某个column 不能是null错误)
关于 rows.Add , 我试过了啊,如果主键重复,是会出现异常的,说是已经有一个同样的主键了。
CellValueChanged 无法被触发.
请问怎么办!!!!?????