datagrid和绑定的datatable问题 如果字段不都显示在datagrid中,那么输入数据不要从datagrid中输入好了。可以分开例如全从textbox输入 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 再加个确定按钮,输入完后保存记录数据并刷新datagrid 绑定到dataTable.DefaultView 上试试看;再不行 ,用CurrencyManager绑定; 笨一点但有效的方法,拖几个隐藏的TextBox,binding那些在DataGrid中没有的字段 datagrid加个标识列,对应某个id,凡是新加的该值为-1,加的时候把所有该ID号为-1的加进去,之后datagrid重新绑定datatable. http://blog.csdn.net/zhzuo/archive/2005/01/03/238273.aspx DataRowView newRowView;BindingManagerBase bmb=ctrl.BindingContext [dataSource,dataMember]; //首先要得到绑定管理器CurrencyManager cm=null;if (bmb is CurrencyManager ) cm =bmb as CurrencyManager ;else return ;IBindingList bindingList=(IBindingList)cm.List ; bindingList.ListChanged +=new ListChangedEventHandler(list_ListChanged);//在此事件中,只能改IsNew行的数据,且不能EndEdit()private void list_ListChanged(object sender, ListChangedEventArgs e) { try { if (e.NewIndex >=0 && listChangedType==ListChangedType.ItemAdded ) //必需这样断定,因为可能是ItemDelete, { newRowView=this.bindingList [e.NewIndex ] as DataRowView ; //这行就是已添加但还没提交的行,在Table中找不到,IsNew为true, } else newRowView=null; } catch (System.Exception ex) { newRowView=null; }} 此是唯一办法,最佳办法, 我自己的问题我从来不会用偏门来解决.CurrencyManager .Current 都不是你要的Row,Rowchaning 事件也得不到,因为新行要EndEdit()后才会提交,才会发生Rowchaning 和 Rowchaned事件但我们要在EndEdit之前得到,不是吗?必需注意,rowchanging事件中不允许用endedit(),bindingList.ListChanged虽然没有不允许,但也是不能用的, if (e.NewIndex >=0 && e.listChangedType==ListChangedType.ItemAdded ) 这句报错:D:\matrix\source\repsta\forms\w_paigong_pop.cs(228): 不可访问“System.ComponentModel.ListChangedEventArgs.listChangedType”,因为它受保护级别限制怎么解决? 我发现了c#的一个bug,请看如下代码: private void list_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) {// try// {// if (e.listChangedType==ListChangedType.ItemAdded && e.NewIndex >=0) //必需这样断定,因为可能是ItemDelete,// //if (e.NewIndex >=0 && a=="ITEMADDED" ) //必需这样断定,因为可能是ItemDelete, // {// newRowView=this.bindingList [e.NewIndex ] as DataRowView ; //这行就是已添加但还没提交的行,在Table中找不到,IsNew为true,// }// else// newRowView=null;// }// catch (System.Exception ex)// {// newRowView=null;// } try { if(e.NewIndex >= 0 && e.ListChangedType == ListChangedType.ItemAdded) { newRowView = this.bindingList [e.NewIndex] as DataRowView; } else newRowView = null; } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); newRowView = null; } }注释掉的try{}catch{}和没有注释掉的完全一样,但是被注释的那段if (e.NewIndex >=0 && e.listChangedType==ListChangedType.ItemAdded ) 这句报错:D:\matrix\source\repsta\forms\w_paigong_pop.cs(228): 不可访问“System.ComponentModel.ListChangedEventArgs.listChangedType”,因为它受保护级别限制而没注释的那段就可以正常运行。 WIN7下 c#调用C++ DLL 失败! 怎樣把代碼中自定義的dataset的值傳給介面上空間托放的一個dataset 这个宏要怎么改写成C# 啊?谢谢 高手来一下了,请教用Blowfish 给密码加密的方法 (C#) 大家帮忙 ListView问题 求救啊!请问在asp.net中(我用的C#.net)中怎么调用DTS, 用通俗的语言讲一下托管和非托管。 c#中字符串函数有哪些?我怎么找不到Replce等函数了? datagrid TCP/IP通讯 Web:通过throw 抛出异常信息后,在哪里获取这信息? 快过年了,sqlserver版好热闹啊!
再不行 ,用CurrencyManager绑定;
BindingManagerBase bmb=ctrl.BindingContext [dataSource,dataMember]; //首先要得到绑定管理器
CurrencyManager cm=null;
if (bmb is CurrencyManager )
cm =bmb as CurrencyManager ;
else
return ;
IBindingList bindingList=(IBindingList)cm.List ;
bindingList.ListChanged +=new ListChangedEventHandler(list_ListChanged);
//在此事件中,只能改IsNew行的数据,且不能EndEdit()
private void list_ListChanged(object sender, ListChangedEventArgs e)
{
try
{
if (e.NewIndex >=0 && listChangedType==ListChangedType.ItemAdded ) //必需这样断定,因为可能是ItemDelete,
{
newRowView=this.bindingList [e.NewIndex ] as DataRowView ; //这行就是已添加但还没提交的行,在Table中找不到,IsNew为true,
}
else
newRowView=null;
}
catch (System.Exception ex)
{
newRowView=null;
}
}
Rowchaning 事件也得不到,因为新行要EndEdit()后才会提交,才会发生Rowchaning 和 Rowchaned事件
但我们要在EndEdit之前得到,不是吗?
必需注意,rowchanging事件中不允许用endedit(),bindingList.ListChanged虽然没有不允许,但也是不能用的,
这句报错:D:\matrix\source\repsta\forms\w_paigong_pop.cs(228): 不可访问“System.ComponentModel.ListChangedEventArgs.listChangedType”,因为它受保护级别限制怎么解决?
{
// try
// {
// if (e.listChangedType==ListChangedType.ItemAdded && e.NewIndex >=0) //必需这样断定,因为可能是ItemDelete,
// //if (e.NewIndex >=0 && a=="ITEMADDED" ) //必需这样断定,因为可能是ItemDelete,
// {
// newRowView=this.bindingList [e.NewIndex ] as DataRowView ; //这行就是已添加但还没提交的行,在Table中找不到,IsNew为true,
// }
// else
// newRowView=null;
// }
// catch (System.Exception ex)
// {
// newRowView=null;
// }
try
{
if(e.NewIndex >= 0 && e.ListChangedType == ListChangedType.ItemAdded)
{
newRowView = this.bindingList [e.NewIndex] as DataRowView;
}
else newRowView = null;
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
newRowView = null;
}
}
注释掉的try{}catch{}和没有注释掉的完全一样,但是被注释的那段if (e.NewIndex >=0 && e.listChangedType==ListChangedType.ItemAdded ) 这句报错:D:\matrix\source\repsta\forms\w_paigong_pop.cs(228): 不可访问“System.ComponentModel.ListChangedEventArgs.listChangedType”,因为它受保护级别限制而没注释的那段就可以正常运行。