代码改变世界

winform开发日常问题小记

2012-05-24 10:31  QA龙  阅读(333)  评论(0编辑  收藏  举报

 问题目录:

1.按钮获得焦点后有边框 如何去掉

2.DataGridView DataSet不显示数据。

3.dataGridView list泛型数据源,绑定后再次绑定无数据

4:Combox 绑定数据源 取值

 

1.按钮获得焦点后有边框 如何去掉

处理办法,添加按钮print事件 指定按钮的print事件为 Override_print

(摘自网上)

        //需要引用命名空间System.Reflection;
        public void HideFocusCues(Control control)
        {
            Type vType = typeof(Control);
            FieldInfo vFieldInfo = vType.GetField("uiCuesState",
                BindingFlags.Instance | BindingFlags.Public |
                BindingFlags.NonPublic | BindingFlags.Static |
                BindingFlags.FlattenHierarchy);
            vFieldInfo.SetValue(control, 15);
        }
        void Override_Paint(object sender, PaintEventArgs e)
        {
            HideFocusCues((Control)sender);
        }

 

2.DataGridView DataSet不显示数据。

 

 DataSet ds = WfBll.getList("");

 dataGridView1.dataSource=ds;

界面上dataGridView1里就是没有数据

而监视ds 里有数据

后来改成了这样

 DataSet ds = WfBll.getList("");

 dataGridView1.dataSource=ds.tables[0];

就可以了

在B/S结构的网站里 这样写是可以的(数据源指定到一个dataSet也可)。而在这种C/S的结构里数据源就必须制定到具体的表。不知道这是为什么?有知道的可以告诉下

3.dataGridView list泛型数据源,绑定后再次绑定无数据

list<StudentModel> list = new List<StudentModel>();

StudentModel  model = new StudentModel(){

StuName="QA龙"

};

list.add(model);

dataGridView1.dataSource= list; //OK  到这里数据显示正常

//然后我要改变数据源

StudentModel  model1 = new StudentModel(){

StuName="张三"

};

list.add(model1);

dataGridView1.dataSource= list;

//这样dataGridView1中就是不显示更改后的值,监视dataSource也是有值就是界面不显示

 后来从网上查了查,泛型list做dataGridView的数据源 是存在这个问题。很多童鞋都碰到过.

找了一个比较好的解决办法 将list泛型替换成bindingList专门为绑定提供的泛型就OK了。或者使用dataTable

参考:http://hi.baidu.com/zhangge9477/blog/item/40336802196b3e094afb51ea.html#0

4.WinForm 中 combox 绑定完数据源后取值

    //绑定数据源
            DataTable dt = dicBll.GetFieldList("101");
            cboDengJSmallC.DataSource = dt;
            cboDengJSmallC.DisplayMember = "FieldName";
            cboDengJSmallC.ValueMember = "FieldValue";

            //取值还是比较麻烦的 
            // cboDengJBigClass.SelectedValue;值为DataRowView类型


            //使用如下方法才能取到想要的value值
            if (cboDengJBigClass.SelectedIndex != -1)
            {
                DataRowView row = (DataRowView)cboDengJBigClass.SelectedValue;
                BindDengJiSmallClass(row["FieldValue"].ToString());
            }

 

 


作者:QA龙
出处:http://www.cnblogs.com/liubaolongcool/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。