要求给出代码示例:问题1
怎样才能在该TreeView的侧边添加一个按钮,或者是在角落上添加也行
问题2
悬浮面板我使用的是UserControl,问题是怎样才能指定位置显示我创建的UserControl;
在点击浮动窗口的确定按钮后,怎样把值传递给主窗口问题1和问题2的图片说明问题3
有没有快速给DataTable添加列的方法
现有DataGridView,用于显示多张表的查询结果,要求必须使用SqlDataReader(不许使用取得DataSet,然后再取得表,直接绑定到DataGridView),然后再一行一行地填充到DataTable,再把该DataTable绑定到DataGridView的方法。
因此产生了一个问题,SqlDataReader取得的表不同,导致每次的列都不同,所以,要每次填充表时都要重新初始化表的列名
测试中发现用  DataTable.Columns.Add(string ColumnName)的方法或者 DataTable.Columns.Add(new DataColumn(string ColumnName))的效率很低,添加40多列需要3秒钟左右(在我的电脑上),实际查询到填充个行连也就1秒不到的时间啊,汗死我用于初始化列的方法如下 #region   根据数据库中指定的表中的列名,初始化指定DataTable的列
        public static void initializeTableColumns(string TableName, DataTable Table)
        {
         //TableName:数据库中的表名   Table:要初始化列的DataTable
            StringBuilder SQL = new StringBuilder();
            SQL.Append("select Column_name from   information_schema.columns   where   Table_name='").Append(TableName).Append("'");    //取得数据库中指定表的所有列名
            Console.WriteLine("开始取得列名:" + DateTime.Now.ToString("hh:mm:ss.fff"));
            DataTable TempTable = DatabaseManager.getDataSet(SQL.ToString()).Tables[0];               Console.WriteLine("取得列名完毕,开始初始化表的列:" + DateTime.Now.ToString("hh:mm:ss.fff"));
            if (TempTable.Columns[0] != null)
            {
                Table.Columns.Clear();
                string ColumnName = null;
                foreach (DataRow r in TempTable.Rows)
                {
                    ColumnName = r[0].ToString();  //取出列名,每一行是一个列名
                    Table.Columns.Add(ColumnName);
                    Console.WriteLine("添加列完毕:" + DateTime.Now.ToString("hh:mm:ss.fff"));
                }
                Console.WriteLine("填充各列完毕:" + DateTime.Now.ToString("hh:mm:ss.fff"));
            }
        }
        #endregion
以下是执行各个步骤的当前时间,精确到毫秒
按钮按下:04:10:50.765
开始查询:04:10:50.765
开始初始化列:04:10:50.765
开始取得列名:04:10:50.765
取得列名完毕,开始初始化表的列:04:10:51.234//关键就是下面添加列名的太慢了添加列完毕:04:10:51.250
添加列完毕:04:10:51.250
添加列完毕:04:10:51.265
添加列完毕:04:10:51.265
添加列完毕:04:10:51.265
添加列完毕:04:10:51.265
添加列完毕:04:10:51.281
添加列完毕:04:10:51.296
添加列完毕:04:10:51.296
添加列完毕:04:10:51.312
添加列完毕:04:10:51.328
添加列完毕:04:10:51.343
添加列完毕:04:10:51.375
添加列完毕:04:10:51.390
添加列完毕:04:10:51.421
添加列完毕:04:10:51.437
添加列完毕:04:10:51.468
添加列完毕:04:10:51.515
添加列完毕:04:10:51.546
添加列完毕:04:10:51.593
添加列完毕:04:10:51.640
添加列完毕:04:10:51.687
添加列完毕:04:10:51.750
添加列完毕:04:10:51.796
添加列完毕:04:10:51.843
添加列完毕:04:10:51.906
添加列完毕:04:10:51.968
添加列完毕:04:10:52.046
添加列完毕:04:10:52.125
添加列完毕:04:10:52.187
添加列完毕:04:10:52.281
添加列完毕:04:10:52.359
添加列完毕:04:10:52.453
添加列完毕:04:10:52.562
添加列完毕:04:10:52.656
添加列完毕:04:10:52.765
添加列完毕:04:10:52.875
添加列完毕:04:10:53.000
添加列完毕:04:10:53.125
添加列完毕:04:10:53.250
添加列完毕:04:10:53.406
添加列完毕:04:10:53.546
添加列完毕:04:10:53.703
添加列完毕:04:10:53.843
添加列完毕:04:10:54.015
填充各列完毕:04:10:54.015
初始化列完毕:04:10:54.015开始取得页数:04:10:54.015
页数初始化完毕:04:10:54.031
开始执行存储过程:04:10:54.031
开始填充条目:04:10:54.062
条目填充完毕:04:10:54.062
开始执行存储过程:04:10:54.062
开始填充条目:04:10:54.062
条目填充完毕:04:10:54.078

解决方案 »

  1.   

    问题1补充下:
    问题1
    怎样才能在该TreeView的侧边添加一个按钮,或者是在角落上添加也行,点击后能立即展开货收缩该TreeView,不允许把TreeView添加到其它容器,再在该容器的边上添加按钮这样的做法,必须在原来的TreeView上添加
      

  2.   

    dim Btn as new button
    Treeview1.Contrls.Add(Btn)
    Btn.Show
      

  3.   

    问题一:建议使用ToolStripContainer或(splitContainer+button),具体使用方法自行查看MSDN
      

  4.   

    combobox绑定列表
    MultiColumnComboSuggestionBox
      

  5.   

    问题二:
    1.可以考虑扩展ToolTip
    2.建议使用模式对话框
    3.可以使用(同级)非模MDI子窗口,通过委托同步数据。问题三:用DataSet保存结果,一次性更新到DataGridView
      

  6.   


    要求必须使用SqlDataReader(不许使用取得DataSet,然后再取得表,直接绑定到DataGridView)
      

  7.   

    问题3的话用存储过程分页,取得dataset后绑定,
      

  8.   

    问题2:
    UserControl生成好后拖放入窗体,
    UserControl都有top 和left 坐标可以控制显示位置,
    Visiable属性可以控制显示或隐藏UserControl
      

  9.   


    select Column_name from information_schema.columns where Table_name=你的列名是从数据库中查出来的,并不是真正的随机生成,为什么不能提前写好,然后做缓存呢?闲暇时光不想浪费吗?用《Csdn收音机》找个话题聊聊技术吧!