程序如下,第一个函数把第1列相同的项隐藏起来只显示第一个,并且在7列标志处总共项,第一个方法在点击了首列的“+”后根据第七列的数据将下面隐藏的行都显示出来,“-”全部隐藏。从程序输出可以看到各行的属性已经修改,但是显示的界面上却没有吧隐藏项显示出来。private void button1_Click(object sender, EventArgs e)
        {
            GetIconClass gic = new GetIconClass();
            Icon ico;
            List<Item> items = new List<Item>();
            getPort test = new getPort();
            items = test.update();
            if (items != null)
            {
                for (int i = 0; i < items.Count; i++)
                {
                    dataGridView1.Rows.Add();
                    ico = gic.GetIconByFileName(items[i].fileName);
                    if (ico == null)
                        ico = gic.GetIconByFileType(".exe",true);
                    dataGridView1[0, i].Value = ico;
                    dataGridView1[1, i].Value = items[i].processName;
                    dataGridView1[2, i].Value = items[i].port;
                    dataGridView1[7, i].Value = 1;
                    if (i != 0)
                    {
                        Console.WriteLine("i is not 0");
                        if (dataGridView1[1, i].Value.Equals(dataGridView1[1, i - 1].Value))
                        {
                            Console.WriteLine("here is a equel");
                            if (dataGridView1.Rows[i - 1].Visible == true)
                            {
                                dataGridView1[7, i - 1].Value = dataGridView1[7, i].Value = 2;
                                dataGridView1.Rows[i].Visible = false;
                                dataGridView1.Rows[i - 1].HeaderCell.Value = "+";
                            }
                            else {
                                int c=int.Parse(dataGridView1[7, i - 1].Value.ToString());
                                for (int j = (i-c); j <= i; j++)
                                { 
                                    dataGridView1[7,j].Value=c+1;
                                }
                                dataGridView1.Rows[i].Visible = false;
                            }
                        }
                    }
                }
            }
        }        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int count = 1;
            int row=e.RowIndex;
            Console.WriteLine("row:"+row);
            int col=e.ColumnIndex;
            if (col == -1)
            {
                DataGridViewCell cell = dataGridView1.Rows[row].HeaderCell;
                if (cell.Value == null)
                {
                    return;
                }
                if (cell.Value.ToString() == "+")
                {
                    Console.WriteLine("+:"+cell.Value.ToString());
                    count = int.Parse(dataGridView1[7, row].Value.ToString());
                    Console.WriteLine("count:" + count);
                    for (int j = 1; j < count; j++)
                    {
                        if (dataGridView1.Rows[row + j].Visible == false)
                        {
                            Console.WriteLine("hidden:" + j);
                        }
                        else {
                            Console.WriteLine("nothidden:" + j);
                        }
                        DataGridViewBand band = dataGridView1.Rows[row];
                        band.Visible = true;
                        //dataGridView1.Rows[row + j].Visible = true;
                    }
                    dataGridView1.Rows[row].HeaderCell.Value = "-";
                }
                if (cell.Value.ToString() == "-")
                {
                    count = int.Parse(dataGridView1[7, row].Value.ToString());
                    for (int j = 1; j < count; j++)
                    {
                        dataGridView1.Rows[row + j].Visible = false;
                    }
                    dataGridView1.Rows[row].HeaderCell.Value = "+";
                }
                Console.WriteLine("no:"+cell.Value.ToString());
            }
        }

解决方案 »

  1.   

    Windows Forms程序里面还有Console.WriteLine为什么不能耐心学习下基本概念,就急急忙忙参与开发呢。
      

  2.   

    怎么没有Console.WriteLine,我只是想把测试结果输出来看看
      

  3.   

    这个语句是控制台输出用的,在winform能用?winform里面是messagebox.show()
    基础啊
      

  4.   

    1楼和5楼
    你们在WinForm里写Console.WriteLine,看看输出窗口里输出的是什么,不会还说别人吗?
      

  5.   


    当然可以这么做。结果就是一个下午给你折腾掉,写出一堆垃圾代码。难道你不知道怎么调试么?正确地输出调试结果应该输出到哪里么?system.diagnostics.debug.writeline() 为什么不用呢?初学者经常跟我讲这个这么这么不是也能弄出来吗。基础不打牢,天天在网上搜索破烂代码,往筐里面装,还振振有词。
      

  6.   

    不是说WinForm里面不能用MessageBox,而是说程序里面不要用正常代码代替调试输出的代码。
    往往一个稍微大一点的程序,输出是很多的。你除错的时候全部加上,编译的时候全部去掉,到时候搞不清楚,造成很不易发现的错误。所以说把新手派去参加开发的后果就是帮倒忙。
      

  7.   

    首先,console.writeln()是可以用的,可以将结果打印在输出窗口。
    然后,如caozhy所说,在调试的时候的确不应该用console.writeln(),应该用system.diagnostics.debug.writeline()。debug类中所有函数的调用都不会在release版本里有效。也就是说,我们通过这种方法所加的代码可以仅用于调试;在发布的时候无需删任何代码,就可以给用户一个没有调试指令的程序了。对于大工程的确很省事。 
    最后,基础真的很重要,特殊情况才选择了不熟悉的C#,时间匆忙没看什么书,做起来很费力。不过实践也很重要,可能你读书破万卷,没有试过还真不知道console.writeln()也可以输出。
    谢谢大家的指教!