0

当用户点击提交按钮时,这一切都会发生

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

1 FF 是快捷方式名称

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

下一个字段是自动增量字段,为此它应该生成并增加一个我想,这个值可以来自表中的自动增量字段,如序列号。像 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

注意:我们还必须考虑 Dash (-),即我们的 ID 格式包括 Dash,即 (-)

提交按钮后:

a) ID 字段将被更新示例:FF-YY-00001 b) 自动增量字段 Sr.no 获取值示例:like 1 c)year 字段将被更新示例:like 2013

希望你能理解要求

4

2 回答 2

1

也许这会帮助你:

int clientId = 3;
int otherId = 4

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

您可以通过将 FF 替换为 {arg} 来设置字母。dropdownlist您可以通过调用获取值dropdownlist.SelectedValue

+

生成字母表中的字母数组

于 2013-03-06T09:55:44.363 回答
0

我假设这个问题不仅与格式化文本有关,还与多个并发用户上下文中的 id 连续性有关。有2种情况:

  1. 您想在保存表单并将其显示给用户之前获取自动生成的 ID。

    如果是这种情况,由于用户并发性,这非常棘手。如果 2 个用户将打开一个表单,您将必须为彼此分配下一个自动递增的值(可能来自数据库或其他持久存储)。如果你这样做,他们将有连续的 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-'+@year+'-'+Replace(Str(
            CASE
                WHEN @rows = 0 THEN 1 
            ELSE 
                IDENT_CURRENT('Forms')+1 
            END
        , 6), ' ' , '0')+'-'+@option
    INSERT Forms (GeneratedId) VALUES (@autoId)
END

这应该就是全部了。

于 2013-03-06T10:09:41.143 回答