日期:2014-05-18  浏览次数:21100 次

WINfORM 中经常会遇到的问题
好久没有搞WINform了,最近遇到几个问题:  
  1. 判断是否选中了DataGridView中的一条信息,或者判断是否是第一条信息。
   
  2. 在TreeView里显示多个节点.
  我现在可以显示一个节点,代码如下,但是不知道显示2个节点。
 
C# code

 public string Str_Operator = "select * from Operator";

        #region //填充操作员信息 TrreView控件
        public void OperatorTreeLoad(object objTreeView, object obimage)
        {
            try
            {
                SqlDataReader dread = bOperate.getread(Str_Operator);

                if (objTreeView.GetType().ToString() == "System.Windows.Forms.TreeView")
                {
                    System.Windows.Forms.ImageList imlist = (System.Windows.Forms.ImageList)obimage;

                    System.Windows.Forms.TreeView TV = (System.Windows.Forms.TreeView)objTreeView;
                    TV.Nodes.Clear();

                    TV.ImageList = imlist;
                    System.Windows.Forms.TreeNode TN = new System.Windows.Forms.TreeNode("武汉营业点", 0, 1);
                    while (dread.Read())
                    {
                        TN.Nodes.Add("", dread[1].ToString(), 0, 1);

                    }
                    TV.Nodes.Add(TN);
                    dread.Close();
                    TV.ExpandAll();
                }
            }//
            catch (Exception ee)
            {
                MessageBox.Show(ee.ToString());
            }

        }// end fi
        #endregion 




  3. 还有个问题,就是当我选中TREE里面的节点里的一条信息的时候,光标自动定位到DataGridView里响应的信息。
他们之间怎么相互关联的呢?

  4 怎样在关闭一个窗体的同时另一个窗体更新
  比如窗体A 上有一个按钮 显示了窗体B , 窗体B在添加完记录后,就关闭,
  然后窗体A上的DATAGridView就刷新一下,显示刚才添加的记录。
  我现在用的一个笨办法,在A窗体家了一个刷新按钮,这样很不方便,每次更新了还要点下更新。 

 

------解决方案--------------------
建议用事件,
------解决方案--------------------
1.
C# code
//删除选中行
        private void DelCheckRows(DataGridView dgvList,string type)
        {
            foreach (DataGridViewRow dgvr in dgvList.Rows)
            {
                if (dgvr.Cells[0].EditedFormattedValue.ToString() == "True") //判断该复选框是否被选中 
                {
                    string strMsgId = dgvr.Cells[1].Value.ToString();
                    MessageBoxInfo m = new MessageBoxInfo(new Guid(strMsgId));
                    if (type == "RecieverDel")//接收方删除
                    {
                        m.RecieverDeleted = true;
                        m.Save();
                    }
                }
            }
            MessageBox.Show("删除成功");
        }

------解决方案--------------------
现在不是都用WPF吗?WinForm都快被淘汰了吧
------解决方案--------------------
第4个用委托:
先在B窗体声明一个事件
C# code
 public event System.EventHandler UpdateData;//声明一个事件

------解决方案--------------------
4 可以在窗体B的Close事件中对窗体A的dataGridView做更新操作
当窗体B关闭,窗体A就再执行一次查询
------解决方案--------------------
1. 判断是否选中了DataGridView中的一条信息,或者判断是否是第一条信息。
答:int selectedIndex=dataGridView1.CurrentRow.Index;
if(selectedIndex==0){
是第一条信息
}
2,在TreeView里显示多个节点.
我现在可以显示一个节点,代码如下,但是不知道显示2个节点。
答:给你实例参考:
foreach(TreeNode treeNode in treeView1.SelectedNode.Nodes)
{
foreach(TreeNode myNode in treeNode.Nodes)
{
//选定当前节点下所有节点


}
3. 还有个问题,就是当我选中TREE里面的节点里的一条信息的时候,光标自动定位到DataGridView里响应的信息。
他们之间怎么相互关联的呢?
答:当你选中TreeView某一节点时,给DataGridView行new一selectIndexChanged事件,同时把DataGridView你需要的行选中,此时即能够关联上你定义的事件,去帮你作DataGridView控件的操作.