大家帮我个忙呗!!!自动生成流水编号!这个问题我很头疼!不好实现!!求代码》》》
问题是:
当选择类别A中的1, 类别B中的01时,自动生成的编号为101001  当下次再同样选择类别A 和B时,自动生成101002, 101003,101004...    
当选择类别A中的1,类别B中的02时,自动生成的编号为102001  当下次再同样选择类别A 和B时,自动生成102002, 102003,102004... 
当选择类别A中的2,类别B中的01时,自动生成的编号为201001  当下次再同样选择类别A 和B时,自动生成201002, 201003,201004... 
当选择类别A中的2,类别B中的02时,自动生成的编号为202001  当下次再同样选择类别A 和B时,自动生成202002, 202003,202004... 
c# 流水编号

解决方案 »

  1.   

    [color=#FF0000]附图说明!!!敬请见教![/color]
      

  2.   

    101001,1和01为程序中拼接字符串的形式获得,后面的001是个字符串,查询数据库表的max(id)获得(每次生成的流水号要保存到数据库),然后string.concat合并起来。
      

  3.   

    這個不是很簡單嗎?自己寫個取得編號的方法
    1.你可以直接根據條件去取他的最大MAX(NO)
    2.你也可以在每次保存的時候把NO保存在一個表中,下次直接加一就是了
    類別字段,序號,
    Bill_Type,Number
    A1B01     101001
    A1B02     102001
    .....
    下次你只要在此直基礎上加1,再更新此表
      

  4.   

    不难,用string.Format自己拼接就可以。
      

  5.   

    我本人就是用的第二種,編號方法比較靈活,參數也有好幾個,這個是按具體需求而定!也加了定制制號的相關單據
    如果送貨單,按月統計按天生成,SA201308270001後面四位流水號,下個月又從這個開始,也可以按年統計,按月生成,SA13080001,流水號長度都是參數控制,所以怎麼樣的需求就怎麼寫
      

  6.   

    这不就是直接拼一下么 int.parse("1"+"02"+"00") 不就是10200
      

  7.   

    引用 3 楼 CXJ0062008 的回复:
    這個不是很簡單嗎?自己寫個取得編號的方法
    1.你可以直接根據條件去取他的最大MAX(NO)
    2.你也可以在每次保存的時候把NO保存在一個表中,下次直接加一就是了
    類別字段,序號,
    Bill_Type,Number
    A1B01     101001
    A1B02     102001
    .....
    下次你只要在此直基礎上加1,再更新此表
    ..........................................
    怎么去写那个语句呢?还有代码???? 方法不错,就是写不出啦!  好人做到底呗,哥哥
      

  8.   

    9楼 您教训的是,可是,我是真不会,一头雾水。我现在还是一个菜鸟。。 还有就是4楼说的string.Format,怎么使用,我组织不好语言啊!!! 
      

  9.   

    假设 数据库 存在表 TB_SerialNum
    结构:
    主键  类型       流水号
     2     typeA     101002
     3     typeB     102002c# : 
    string 流水号=DBHelperSQL.ExecuteScalar("select Max(流水号) FROM TB_SerialNum WHERE 类型='typeA'").ToString();
    if(string.isnullOrempty(流水号))
    {
    流水号="101001";
    }
    string 新流水号=(int.Parse(流水号)+1).ToString();
        DBHelperSQL.ExecuteSql("INSERT INTO TB_SerialNum VALUES('typeA','"+新流水号+"' )");//插入 新流水号到  TB_SerialNum 
      

  10.   

    下班回家喽  慢慢研究吧create table 流水表(编号 nvarchar(10))
    insert into 流水表 values ('102001')
    IF EXISTS(SELECT * FROM sys.objects o WHERE o.object_id = OBJECT_ID('dbo.abc'))
    DROP FUNCTION dbo.abc
    GO
    CREATE FUNCTION dbo.abc
    (
    @TYPEA NVARCHAR(10),
    @TYPEB NVARCHAR(10)
    )
    RETURNS VARCHAR(15)
    BEGIN
    DECLARE @ID VARCHAR(15)

    IF EXISTS(
    SELECT *
    FROM 流水表 m
    WHERE
    @TYPEA+@TYPEB = SUBSTRING(m.编号,1,3)
    )
    BEGIN
    SET @ID = (SELECT MAX(m.编号) FROM 流水表 m WHERE @TYPEA+@TYPEB = SUBSTRING(m.编号,1,3))
    SET @ID = RIGHT(@ID, 3) + 1
    SET @ID = 1000 + @ID
    SET @ID = RIGHT(@ID, 3)
    SET @ID = @TYPEA+@TYPEB + CAST(@ID AS CHAR(3))
    END
    ELSE
    SET @ID = @TYPEA+@TYPEB + '001'
    RETURN @ID
    ENDDECLARE @ID VARCHAR(15)
    set @ID=dbo.abc('1','02')
    select @ID/*
    102002
    */
      

  11.   

    很像会计科目设计经常使用的方法
    建立下表层次id     已编号      名称       位数     父级id
    1          1      第一层       1       null
    2          1      第二层       2        1
    3          1      第三层       3        2再哪一层增加项目,就查找哪层的已编号数,位数不够的前边补0如再第二层增加科目,就取父级条目(第一层)已编号 + 第二层已编号加一,作为流水号
    推荐使用递归,这样可以做无限级代码自填
      

  12.   

           string t1 ="101";
            string strsql = "select * from test where  流水编号 like '%" + t1 + "%' ";
            dv = Das.CreateDataView(strsql);
            int tt = dv.Table.Rows.Count;
            int temp = 0;
            if (tt > 1)
            {
                for (int i = 0; i < tt; i++)
                {
                    if (i == 0)
                    {
                        string tt1 = Convert.ToString(dv.Table.Rows[i][0]);
                        tt1 = tt1.Substring(3, 4);
                        temp = Convert.ToInt32(tt1);
                    }
                    else
                    {
                        string tt1 = Convert.ToString(dv.Table.Rows[i][0]);
                        tt1 = tt1.Substring(3, 4);
                        int temp1 = Convert.ToInt32(tt1);
                        if (temp1 > temp)
                        {
                            temp = temp1;
                        }                }
                }            string stemp = Convert.ToString(temp + 1).Trim();
                int st = stemp.Length;
                if (st == 1)
                {
                    stemp = "000" + stemp;
                }
                else if (st == 2)
                {
                    stemp = "00" + stemp;
                }
                else if (st == 3)
                {
                    stemp = "0" + stemp;
                }
                else if (st == 4)
                {
                    stemp = stemp;
                }
                this.Label3.Text = t1 + Convert.ToString(stemp).Trim();
            }
            else if (tt == 1)
            {
                for (int i = 0; i < tt; i++)
                {                string tt1 = Convert.ToString(dv.Table.Rows[i][0]);
                    tt1 = tt1.Substring(3, 4);
                    temp = Convert.ToInt32(tt1) + 1;            }            string stemp = Convert.ToString(temp).Trim();
                int st = stemp.Length;
                if (st == 1)
                {
                    stemp = "000" + stemp;
                }
                else if (st == 2)
                {
                    stemp = "00" + stemp;
                }
                else if (st == 3)
                {
                    stemp = "0" + stemp;
                }
                else if (st == 4)
                {
                    stemp = stemp;
                }
                流水编号 = t1 + Convert.ToString(stemp).Trim();
            }
            else
            {
               流水编号 = t1 + "0001";
            }
      

  13.   

    icdbow(13楼的) ,您给的思路也很对,可是具体怎么操作呢?我是真的不会!
    还有就是我最讨厌用sql中的存储过程了,可以不用存储过程嘛?
    亲爱的大家,快来帮我这个可爱的小羔羊吧!!!
      

  14.   

    我做出来了! 给大家分享下:
    我的思路是 先查询项目1,项目2 (拼接起来)的最大值 
    在赋值给料号的文本框改变项目1和项目2的文本框内容时候:
          protected void TextBox项目1_TextChanged(object sender, EventArgs e)
            {string NO1 = "";
                string NO2 = "";
                string NO3 = "%";
                string NO = "";            NO1 = TextBox4.Text.ToString();
                NO2 = TextBox5.Text.ToString();
                NO = NO1.ToString() + NO2.ToString()+NO3.ToString();           // SqlConnection conn = new SqlConnection("server=.;database=custom;");
                conn.Open();
                SqlCommand comm = new SqlCommand("select max(Cust_No)+1  NewNo  from custom  where Cust_No LIKE '"+NO+"'", conn);
                SqlDataReader sdr = comm.ExecuteReader();            while (sdr.Read())
                {
                    T_kehuNO.Text = sdr["NewNo"].ToString();
                }
                sdr.Close();
                conn.Close();
    }
      

  15.   

    为何要放到一起呢分开存不好吗
    A
    Code
    1
    2
    3
    B
    Code
    01
    02
    03
    将这两个类的值保存到流水号的表,
    生成流水号时  where A类Code值=1 and B类Code值=01
    取到Max(流水号)
    将A类的Code+B类的Code值+max(流水号) 这样子就可以生成了。 
      

  16.   

    补充一下
    将A类的Code+B类的Code值+max(流水号) 这样子就可以生成了。 

    此处如果设置了默认值的话就不用这样子了,只须 以max(流水号)+1即可(如果max(流水号不存在,就要设定初始的值的形式如 1010001))
      

  17.   

    如果要解决后续尾号数值问题
    如:101999的时候,再添加的话会是102000
    将流水编号另存一个字段吧A类Code +B类Code +流水尾号
    1                01            999【流水编号生成方式】 A类Code+B类Code+(max(流水尾号) +1)
    101999=>1011000
      

  18.   

    怎么形式啊?我的流水编号设置的是101001   101002  101999    可是现在数据太多,我想重新设置成1010001   1010002  .......  1010999  1011000    该怎么修改呢? 该不会一个个的修改吧。 my gard!!!!!!!!!!!