wince PDA 关于DataGrid 绑定、列宽 及“值不在预期的范围内”异常

最近刚接触PDA开发,做了一个小程序,我是这样实现的。列表页在form_load方法中绑定datagrid的数据,然后在新窗体中修改或增加一行新的数据,利用委托实现列表页的及时更新。

菜鸟心得,刚接触winform或者pda开发的朋友也许会有些帮助。不对的地方请不吝批评指正。

     DataTable dt= bwork.GetWorks(" 1=1 ").Tables[0];
             GridWorks.TableStyles.Add(BulidGridTableStyle(dt));
             GridWorks.DataSource = dt;
BulidGridTableStyle(dt)是根据datatable的列自动生成DataGridTableStyle
 1         private DataGridTableStyle BulidGridTableStyle(DataTable dt)
 2         {
 3             DataGridTableStyle ts = new DataGridTableStyle();
 4             ts.MappingName = dt.TableName;
 5             int width = GridWorks.Width;
 6             for (int i = 0; i < dt.Columns.Count; i++)
 7             {
 8                 DataGridColumnStyle dgstyle = new DataGridTextBoxColumn();
 9                 dgstyle.MappingName = dt.Columns[i].ColumnName;
10                 dgstyle.HeaderText = dt.Columns[i].ColumnName;
11                
12                 dgstyle.Width = width / dt.Columns.Count;
13                 ts.GridColumnStyles.Add(dgstyle);
14             }
15             return ts;
16 
17 
18 
19         }

显示结果

当我点添加或修改时会打开新窗体,修改时会吧当前选中行的值带过去。
带值就是直接在新窗体里另加了一个构造。

新窗体中的构造方法
 1         public WcfOperate(WorkService.WORK wcfwork,bool isinsert)
 2         {
 3             InitializeComponent();
 4             this.lblid.Text = wcfwork.WORK_ID.ToString();
 5             this.txtname.Text = wcfwork.WORK_NAME.ToString();
 6             this.txtdesc.Text = wcfwork.WORK_DESC.ToString();
 7             this.txtman.Text = wcfwork.WORK_MAN;
 8             this.txtstate.Text = wcfwork.WORK_STATE.ToString();
 9             insert = isinsert;
10         

列表窗体的修改事件

 1      MWork mwork = new MWork();
 2             mwork.WORK_ID = Convert.ToInt32(GridWorks[GridWorks.CurrentRowIndex, 0].ToString());
 3             mwork.WORK_NAME = GridWorks[GridWorks.CurrentRowIndex, 1].ToString();
 4             mwork.WORK_DESC = GridWorks[GridWorks.CurrentRowIndex, 2].ToString();
 5             mwork.WORK_MAN = GridWorks[GridWorks.CurrentRowIndex, 3].ToString();
 6             mwork.WORK_STATE = Convert.ToInt32(GridWorks[GridWorks.CurrentRowIndex, 4].ToString());
 7 
 8             FormOperate operate = new FormOperate(mwork,false);
 9             operate.DataEvent += new FormOperate.ReLoadData(operate_DataEvent);
10         
11             operate.Show();

为了实现在新窗体中添加或者修改信息后,列表窗体可以及时显示最新数据,我在新窗体中定义了一个委托及其事件

1    public delegate void ReLoadData(string strWhere);
2         public event ReLoadData DataEvent;

在添加完成之后会触发这个事件

1   if (result)///result/为判断是否插入成功
2           {
3               DataEvent(" 1=1 ");
4               this.Hide();
5               return;
6           }
7           MessageBox.Show("插入失败");

成功之后会触发事件DataEvent,上文中在列表窗体修改事件打开新窗体时我们就已经注册过了DataEvent事件,

operate.DataEvent += new FormOperate.ReLoadData(operate_DataEvent);然后在建了一个事件出发时调用的方法
operate_DataEvent 

CODE 1


1
void operate_DataEvent(string strWhere) 2 { 3 DataTable dt = bwork.GetWorks(" 1=1 ").Tables[0]; 4 5 GridWorks.TableStyles.Add(BulidGridTableStyle(dt)); 6 GridWorks.DataSource = dt; 7 8 }

这样实现DataGrid的数据更新。

问题就出现在这里了。当我更新完一条数据时,出现了异常值不在预期的范围内。 CODE 1 中,我仍然是先把取到的数据放在了datatable中,然后在根据datatable构造GridTableStyle,然后在绑定数据。因为在列表窗体始终是未关闭状态的,其中的TableStyles依然存在。当我更新完之后再次声明了一个GridTableStyle致使与之前的GridTableStyle重复。然后就报错了。也就是说,给他重新加一样的TableStyle就会报错。于是呼就把

  GridWorks.TableStyles.Add(BulidGridTableStyle(dt));
这段代码搞掉了,然后运行通过~。
也可以在适当位置加 TableStyles.Clear()这段代码,顾名思义,就是清除掉之前样式。

  




 

转载于:https://www.cnblogs.com/MLGB/archive/2013/06/09/3128220.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值