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

新手求助:listview或datagridview实现自动多列方法
该软件的作用是简单的通讯录,只有联系人和联系电话,为了便于打印出a4
  软件要求: 当第一,二列联系人达到一定的行数自动生成第三,四列,以此类推.
  希望哪个兄弟给我思路,最好是案例,谢谢
  看下图


------解决方案--------------------
很简单,就是原来你用一行两列来显示100条数据,那么就是100行

你现在想用25行来显示这些数据,那么 就需要 100/25*2 列

把数据弄成这个样子就可以了

新建一个DataTable 然后把数据导入
------解决方案--------------------
C# code

void DataBind()
        {
            DataTable dt = InitTable();
            List<string> lstSource = new List<string>();
            lstSource.Clear();

            DataTable dtSource = new DataTable();

            if (dt != null && dt.Rows.Count > 0)
            {
                    int page = 20;      //假设超过20行则增加新列
                int rem = dt.Rows.Count / page;  
                int remCount = rem;
                if (dt.Rows.Count % page > 0)
                {
                    remCount = remCount + 1;
                }

                int range = 0;
                int index = 0;
                foreach (DataRow row in dt.Rows)
                {                    
                    if (range < page)
                    {
                        lstSource.Add(row["PERSON"].ToString() + "," + row["TELEPHONE"].ToString());
                    }
                    else
                    {
                        if (range % page != 0)
                        {
                            lstSource[index] = lstSource[index] + "," + row["PERSON"].ToString() + "," + row["TELEPHONE"].ToString();
                            index++;
                        }
                        else
                        {
                            if (index == page)
                                index = 0;
                            lstSource[index] = lstSource[index] + "," + row["PERSON"].ToString() + "," + row["TELEPHONE"].ToString();
                            index = 1;
                        }                        
                    }
                    range++;
                }
            }

            if (lstSource.Count > 0)
            {
                string[] strColumns = lstSource[0].Split(new char[] { ',' });
                for (int i = 0; i < strColumns.Length; i++)
                {
                    dtSource.Columns.Add("Column" + i.ToString());
                }
            }

            foreach (string str in lstSource)
            {
                string[] values = str.Split(new char[] { ',' });
                dtSource.Rows.Add(values);
            }

            dataGridView1.DataSource = dtSource;
        }

        private DataTable InitTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("PERSON", typeof(string));
            dt.Columns.Add("TELEPHONE", typeof(string));

            for (int i = 0; i < 110; i++)
            {
                DataRow dr = dt.NewRow();
                dr["PERSON"] = "联系人" + i.ToString();
                dr["TELEPHONE"] = "联系电话" + i.ToString();
                dt.Rows.Add(dr);
            }

            return dt;
        }