肯定你搞了删除操作!所以会不对!建议不要用currentrowindex,可以在填充数据的时候,直接把记录编号写入数据集中!
补充一下,你头发掉光和程序无关,可能是你的电脑辐射太强,建议换液晶!
补充一下,你头发掉光和程序无关,可能是你的电脑辐射太强,建议换液晶!
解决方案 »
- C# winform panel 滚动条可以加样式吗
- 如何实现自动抓班
- 我把flash放到窗体程序后,安装部署后。文件夹里还是有flash文件 能否不让flash文件显示出来!??
- C#程序在WIN2003下编译运行正常,在XP下安装后运行提示错误
- c#操作导入excel,如何设置列的格式?
- 问一个控件问题
- 跪求!!未能加载文件或程序集“Microsoft.SqlServer.Management.SqlParser, Version=10.0.0.0
- llnet(龙首山) 来接分,帮我解决了datagrid的问题
- 关于mdi的问题
- C#在xp下使用wmi正常,但98下出错,谁能解决?
- 到底有没有visual studio.net 2004?
- 写入读取的问题,各位大哥帮忙看看。
主要思想,取出捆绑在DataGrid中的DataView,然后从中读取相对应的Index即可我一直使用,挺好使的,好多人使用排列顺序来取,结果顺序更换之后总是很难修改程序
System.Data.DataView dv = (System.Data.DataView)cm.List; for(int i = 0; i < dv.Count; ++i)
{
if(this.dgVidicon.IsSelected(i))
{
m_intVidiconID = Int32.Parse(dv[i]["VidiconID"].ToString());
}
}
这一句我看不太明白,尤其是dv[i]["VidiconID"]的具体意思。ps:n年前我就统统换液晶了,头发是自己抓下来的。
这一句我看不太明白,尤其是dv[i]["VidiconID"]的具体意思。这是我的一个应用,在为DataGrid设置数据源的时候有一个字段是VidiconID在这里,我获取了DataGrid的DataView,也就是dv,这个DataView和DataGrid的当前排列顺序一致,记录条数也一致,然后我就从这个dataview中获取选中的行的数据if(this.dgVidicon.IsSelected(i)) 这条语句是判断本记录是否是DataGrid中被选中的记录
下面的代码就有,列表框刷新函数,直接调用即可
public static void RefreshDataGrid(System.Windows.Forms.DataGrid DG, System.Data.DataView DV, string m_strWidth, string m_strHidden, bool m_blnIsReDraw)
{
try
{
int i;
int numCols;
System.Windows.Forms.DataGridTableStyle ts = new System.Windows.Forms.DataGridTableStyle(); //就是它决定了datagrid是什么样的
System.Windows.Forms.DataGridTextBoxColumn aColumnTextColumn; //要重写的东东
System.Windows.Forms.DataGridBoolColumn aColumnBoolColumn; //要重写的东东 string[] ColumnWidths = m_strWidth.Split(';');
string[] strHiddens = m_strHidden.Split(';'); numCols = DV.Table.Columns.Count; if (m_blnIsReDraw == true)
{
foreach(string strHiddenTemp in strHiddens)
{
if (strHiddenTemp.Length > 0)
{
DV.Table.Columns[strHiddenTemp].ColumnMapping = System.Data.MappingType.Hidden;
}
} DG.Font = new System.Drawing.Font("宋体",10,System.Drawing.FontStyle.Regular);
} DG.DataSource = DV; if (m_blnIsReDraw == true)
{
ts.MappingName = DV.Table.TableName; for(i=0;i<numCols;i++) // 重绘所有的列
{
switch (DV.Table.Columns[i].DataType.Name)
{
case "Boolean": //bool Column
aColumnBoolColumn =new System.Windows.Forms.DataGridBoolColumn();
//要更改列头名,请改下句的HeaderText值
aColumnBoolColumn.HeaderText = DV.Table.Columns[i].ColumnName;
aColumnBoolColumn.MappingName = DV.Table.Columns[i].ColumnName; if (ColumnWidths.Length > i)
{
aColumnBoolColumn.Width = (int) (Convert.ToDouble(ColumnWidths[i]) * 50);
} ts.GridColumnStyles.Add(aColumnBoolColumn); //增加一种自定义的column风格 break; default: //Default (Text) Column
aColumnTextColumn =new System.Windows.Forms.DataGridTextBoxColumn();
//要更改列头名,请改下句的HeaderText值
aColumnTextColumn.HeaderText = DV.Table.Columns[i].ColumnName;
aColumnTextColumn.MappingName = DV.Table.Columns[i].ColumnName; if (ColumnWidths.Length > i)
{
aColumnTextColumn.Width = (int) (Convert.ToDouble(ColumnWidths[i]) * 50);
} ts.GridColumnStyles.Add(aColumnTextColumn); //增加一种自定义的column风格 break;
}
}
DG.TableStyles.Clear();
DG.TableStyles.Add(ts);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message.ToString(),"DataGrid刷新错误");
}
}
怎样搜索datatable,得到对应行的记录号?按道理说关键字段的值不会有重复,但是当我还没有update的时候,如果不加一些特殊的控制,在datatable里面还是会存在关键字段值重复的情况的。在这种情况下,搜索datatable就无法定位了。如果我有两条以上记录关键字段的值重复,这样在搜索的时候我就不会知道到底哪一条才是我所想要的,也就是说到底哪一条才是需要删除的记录。而我用“del”键来删除记录的时候就不用加任何控制,程序会自动判断那条是要删除的。我所感兴趣的,就是程序到底是怎样来实现这个功能的。
应该用对应Datagrid中主关键字字段的值。到数据库中去删除。
另外,关键字重复的情况,在输入的时候就应该控制。而不是到数据库时再检证。