2013-03-06 66 views
0

一个自动生成的ID字段这一切会发生,当用户点击提交按钮需要在形式上

我的要求:ID格式应该是FF-YY-00001-A(这是该表的字段)

1 FF是快捷方式名称

2.YY是当前日期,我想将它保存在表格中作为年份字段,以便它有助​​于追踪报告,条件:我必须采取最后部分今年即假设2013 => 13 2014 => 14

next field is autoin为此,它应该被生成并递增一个 我想,这个值可以来自表格的自动增量字段,如序列号。像sr.no = 1,我们可以把这个字段设为00001或1 00001(应该会更好,如果我们可以的话)

我们也必须将这个值增加到1 [*我们必须得到以前的比较值,可以用最后的记录和现场sr.no]的帮助下做

4.A/B/C/d是从用户的选择

这一切

现在我们的ID应该是后FF- 13-1-A下一个:FF-13-2-B下一个输入:FF-13-3-C

注意:我们必须考虑D灰( - )也即我们的ID格式包括短跑,即( - )

提交后按钮:

一)ID字段将被更新,例如:FF-YY-00001 B)自增字段Sr.no得到价值例:如1C)一年场将被更新例如:像2013

希望你会明白的要求

+0

_00001 ... 00004是自动递增值__下一次当另一个用户打开窗体时,它会分配新生成的ID_,所以它来自数据库? – 2013-03-06 09:54:12

+0

“形式”(顺便说一句“什么是形式”)和db行,列,表之间有什么关系?该情景真的不清楚(乍一看) – 2013-03-06 09:54:50

+0

您需要在保存之前显示自动生成的ID吗? – 2013-03-06 10:01:49

回答

1

也许这将帮助你:

int clientId = 3; 
int otherId = 4 

var id = String.Format("FF-{0}-{1:D5}-A", otherId, clientID); 

在哪里可以通过将FF替换为{arg}来设置字母。你可以通过调用dropdownlist.SelectedValue

+

Generating an array of letters in the alphabet

0

得到dropdownlist值我会认为,这个问题不仅是格式化文本,但也对在多个并发的上下文ID的连续性用户。有2种情况:

  1. 你想获得自动生成的ID 形式被保存之前并显示给用户。

    如果是这种情况,由于用户并发性,这是非常棘手的。如果2个用户打开表单,则必须为彼此分配下一个自动递增的值(可能构成数据库或其他永久性存储)。如果你这样做,他们将有连续的ID。但是,如果第一个用户在第二个用户填写表单时取消了表单,这将打破字段中自动递增部分的连续性(第二个用户已经有一个跳过前一个的ID,该ID已被取消)。作为此场景的唯一解决方法,您必须打破ID连续性,或者在保存新值后将其替换(这没有太大意义)。

  2. 您将在之后显示自动生成的ID给用户表单被保存。

    这是很容易做到的,最好的方式(我认为)是发送用户选项(A/B/C/D),最终也是一年中的最后两位数字到数据库存储过程,这将通过字符串连接处理自动生成的id的创建。在此之后你所要做的就是从数据库中返回自动生成的ID。

[更新]

如果你去的第二个方案,我会后你必须做的事情的例子。我假设你正在使用MS SQL Server,存储过程也是你的选择。

首先,我将在这个例子中使用一个简单的形式:

<form id="form1" runat="server"> 
    <div> 
     <asp:DropDownList runat="server" ID="ddl"> 
      <asp:ListItem Text="A" Value="A"></asp:ListItem> 
      <asp:ListItem Text="B" Value="B"></asp:ListItem> 
      <asp:ListItem Text="C" Value="C"></asp:ListItem> 
      <asp:ListItem Text="D" Value="D"></asp:ListItem> 
     </asp:DropDownList> 
     <asp:Button runat="server" ID="btn" 
      OnClick="btn_Click" Text="Add form" /> 
     <asp:Label runat="server" ID="label" /> 
    </div> 
</form> 

添加它处理按钮点击的方法:

protected void btn_Click(object sender, EventArgs e) 
{ 
    var year = DateTime.Now.Year.ToString(); 
    var yearDigits = year.Substring(year.Length - 2); 
    var generatedId = SaveForm(yearDigits, ddl.SelectedValue); 
    label.Text = generatedId; 
} 

添加您的连接字符串的地方在那里它从SaveForm访问方法:

const string connectionString = @"yourConnectionString"; 

添加执行插入的方法并返回自动生成的ID:

private string SaveForm(string yearDigits, string userOption) 
{ 
    string autoId; 
    using (var sqlConnection = new SqlConnection(connectionString)) 
    { 
     try 
     { 
      sqlConnection.Open(); 
      using (var sqlCommand = new SqlCommand("AddForm", sqlConnection)) 
      { 
       sqlCommand.CommandType = CommandType.StoredProcedure; 
       sqlCommand.Parameters.Add("year", SqlDbType.Char, 2) 
        .Value = yearDigits; 
       sqlCommand.Parameters.Add("option", SqlDbType.Char, 1) 
        .Value = userOption; 
       var outputParameter = new SqlParameter(); 
       outputParameter.ParameterName = "autoId"; 
       outputParameter.Direction = ParameterDirection.Output; 
       outputParameter.SqlDbType = SqlDbType.Char; 
       outputParameter.Size = 14; 
       sqlCommand.Parameters.Add(outputParameter); 
       sqlCommand.ExecuteNonQuery(); 
       autoId = outputParameter.Value.ToString(); 
      } 
     } 
     catch (Exception) 
     { 
      // TODO: manage exception 
      throw; 
     } 
    } 
    return autoId; 
} 

在SQL服务器端,我们将使用一个简单的表:

CREATE TABLE [dbo].[Forms](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [GeneratedId] [char](14) NOT NULL, 
    CONSTRAINT [PK_Forms] PRIMARY KEY CLUSTERED 
    (
     [Id] ASC 
    ) 
) 

现在,添加存储过程,而将插入宿舍数据和意志返回自动生成的ID:

CREATE PROCEDURE [dbo].[AddForm] 
    @year char(2), 
    @option char(1), 
    @autoId char(14) output 
AS 
BEGIN 
    DECLARE @rows int 
    SELECT 
     @rows = (SELECT COUNT(*) FROM [Forms]), 
     @autoId = 'FF-'[email protected]+'-'+Replace(Str(
      CASE 
       WHEN @rows = 0 THEN 1 
      ELSE 
       IDENT_CURRENT('Forms')+1 
      END 
     , 6), ' ' , '0')+'-'[email protected] 
    INSERT Forms (GeneratedId) VALUES (@autoId) 
END 

这应该是全部。

+0

请仔细阅读我描述的情况。之后,让我知道这两种方案适合您的要求。 – 2013-03-06 10:27:09

+0

请删除您提到的问题并更新当前的问题。 – 2013-03-06 11:43:34

+0

更新是否令人满意? – 2013-03-06 13:01:05