本帖最后由 xiaopei711 于 2009-08-10 12:54:19 编辑

解决方案 »

  1.   

     
    感觉 你这个有点类似生成动态树一样,从一张表中读数据,生成一动态树,可以这样设计表结构
    编码     名称    父编码    等级
    01      江苏    <空>     0
    0101    南京    01       1
    0102    苏州    01       1
    010101  鼓楼区  0101     2
    02      山东   <空>      0
    0201    济南    02       1读表时在根据你的要求添加你想要做的功能
      

  2.   

    public void FormatTo(DataGridView dgv)
            {
                int n1 = 0;
                int n2 = 0;
                int n3 = 0;
                int n4 = 0;
                for (int i = 0; i < dgv.RowCount; i++)
                {
                    if (dgv.Rows[i].Cells["代码"].Value.ToString().Length == 2)
                    {
                        n1 += 1;
                        n2 = 0;
                        n3 = 0;
                        n4 = 0;
                        dgv.Rows[i].Cells["名称"].Value = NumToStr(n1,1) + dgv.Rows[i].Cells["名称"].Value;
                    }
                    else if (dgv.Rows[i].Cells["代码"].Value.ToString().Length == 3)
                    {
                        n2 += 1;
                        dgv.Rows[i].Cells["名称"].Value = NumToStr(n2, 2) + dgv.Rows[i].Cells["名称"].Value;
                    }
                    else if (dgv.Rows[i].Cells["代码"].Value.ToString().Length == 4)
                    {
                        n3 += 1;
                        dgv.Rows[i].Cells["名称"].Value = NumToStr(n3, 3) + dgv.Rows[i].Cells["名称"].Value;
                    }
                    else if (dgv.Rows[i].Cells["代码"].Value.ToString().Length == 5)
                    {
                        n4 += 1;
                        dgv.Rows[i].Cells["名称"].Value = NumToStr(n4, 4) + dgv.Rows[i].Cells["名称"].Value;
                    }
                }
            }        public string NumToStr(int num,int type)
            {
                if (type == 1)
                {
                    string[] str = {"","一","二","三","四","五","六","七","八","九" };
                    return str[num] + "、";
                }
                else if (type == 2)
                {
                    string[] str = { "", "(一)", "(二)", "(三)", "(四)", "(五)", "(六)", "(七)", "(八)", "(九)" };
                    return str[num] + "、";
                }
                else if (type == 3)
                {
                    string[] str = { "", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
                    return str[num] + "、";
                }
                else if (type == 4)
                {
                    string[] str = { "", "(1)", "(2)", "(3)", "(4)", "(5)", "(6)", "(7)", "(8)", "(9)" };
                    return str[num] + "、";
                }
            }
      

  3.   

    由于DataGridView表头可以排序的,所以不用判断代码开头是不是一样的
      

  4.   

    1.DataGridView排序,转换之前,先点一下代码列的列头,注意此排序不是按照数字大小来排序的.它会很规则的将你的代码数据列排列成树结构。
    if (dgv.Rows[i].Cells["代码"].Value.ToString().Length == 2)
                    {
                        n1 += 1;
                        //这里就已经重新开始排序了
                        n2 = 0;
                        n3 = 0;
                        n4 = 0;
                        dgv.Rows[i].Cells["名称"].Value = NumToStr(n1,1) + dgv.Rows[i].Cells["名称"].Value;
                    }2.至于有几百条,那么则自己补充数组.
    string[] str = { "", "一", "二", "三", "四", "五", "六", "七", "八", "九","十",…… };
      

  5.   

    楼主,你好贪哦...BitCoffee都帮你解决问题了,你还要怎样啊?
      

  6.   

    //一个数字转大写的类
    public class Money
        {
            public Money()
            {
                //
                // TODO: Add constructor logic here
                //
            }
            private char 转换数字(char x)
            {
                string stringChnNames = "零一二三四五六七八九";
                string stringNumNames = "0123456789";
                return stringChnNames[stringNumNames.IndexOf(x)];
            }
            private string 转换万以下整数(string x)
            {
                string[] stringArrayLevelNames = new string[4] { "", "十", "百", "千" };
                string ret = "";
                int i;
                for (i = x.Length - 1; i >= 0; i--)
                    if (x[i] == '0')
                        ret = 转换数字(x[i]) + ret;
                    else
                        ret = 转换数字(x[i]) + stringArrayLevelNames[x.Length - 1 - i] + ret;
                while ((i = ret.IndexOf("零零")) != -1)
                    ret = ret.Remove(i, 1);
                if (ret[ret.Length - 1] == '零' && ret.Length > 1)
                    ret = ret.Remove(ret.Length - 1, 1);
                if (ret.Length >= 2 && ret.Substring(0, 2) == "一十")
                    ret = ret.Remove(0, 1);
                return ret;
            }
            private string 转换整数(string x)
            {
                int len = x.Length;
                string ret, temp;
                if (len <= 4)
                    ret = 转换万以下整数(x);
                else if (len <= 8)
                {
                    ret = 转换万以下整数(x.Substring(0, len - 4)) + "万";
                    temp = 转换万以下整数(x.Substring(len - 4, 4));
                    if (temp.IndexOf("千") == -1 && temp != "")
                        ret += "零" + temp;
                    else
                        ret += temp;
                }
                else
                {
                    ret = 转换万以下整数(x.Substring(0, len - 8)) + "亿";
                    temp = 转换万以下整数(x.Substring(len - 8, 4));
                    if (temp.IndexOf("千") == -1 && temp != "")
                        ret += "零" + temp;
                    else
                        ret += temp;
                    ret += "万";
                    temp = 转换万以下整数(x.Substring(len - 4, 4));
                    if (temp.IndexOf("千") == -1 && temp != "")
                        ret += "零" + temp;
                    else
                        ret += temp;
                }
                int i;
                if ((i = ret.IndexOf("零万")) != -1)
                    ret = ret.Remove(i + 1, 1);
                while ((i = ret.IndexOf("零零")) != -1)
                    ret = ret.Remove(i, 1);
                if (ret[ret.Length - 1] == '零' && ret.Length > 1)
                    ret = ret.Remove(ret.Length - 1, 1);
                return ret;
            }        private string 转换小数(string x)
            {
                string ret = "";
                for (int i = 0; i < x.Length; i++)
                    ret += 转换数字(x[i]);
                return ret;
            }        public string NumToChn(string x)
            {
                if (x.Length == 0)
                    return "";
                string ret = "";
                if (x[0] == '-')
                {
                    ret = "负";
                    x = x.Remove(0, 1);
                }
                if (x[0].ToString() == ".")
                    x = "0" + x;
                if (x[x.Length - 1].ToString() == ".")
                    x = x.Remove(x.Length - 1, 1);
                if (x.IndexOf(".") > -1)
                    ret += 转换整数(x.Substring(0, x.IndexOf("."))) + "点" + 转换小数(x.Substring(x.IndexOf(".") + 1));
                else
                    ret += 转换整数(x);
                return ret;
            }
        }
      

  7.   

    //替换上面的方法
    public string NumToStr(int num, int type)
            {
                if (type == 1)
                {
                    //调用数字转大写的类
                    转大写的类 类 = new 转大写的类();
                    string str = 类.NumToChn(num.ToString());
                    return str + "、";
                }
                else if (type == 2)
                {
                    //调用数字转大写的类
                    转大写的类 类 = new 转大写的类();
                    string str = 类.NumToChn(num.ToString());
                    return "(" + str + ")、";
                }
                else if (type == 3)
                {
                    return num.ToString() + "、";
                }
                else if (type == 4)
                {
                    return "(" + num.ToString() + ")、";
                }
            }