当用户点击提交按钮时会发生这一切
我的要求:ID格式应为FF-YY-00001-A(这是表格的字段)
1 FF是快捷方式名称
2.YY是当前日期,我想将其保存在表格中作为年份字段,以便它有助于追踪报告,条件:我必须采取一年的最后部分,即假设2013 =&gt ; 13 2014年>> 14
下一个字段是autoincrement字段,为此它应该生成并递增1 我想,这个值可以来自Serial no的表中的自动增量字段。比如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获取值示例:如1 c)年份字段将更新示例:如2013
希望你能理解要求
答案 0 :(得分:1)
也许这会对你有所帮助:
int clientId = 3;
int otherId = 4
var id = String.Format("FF-{0}-{1:D5}-A", otherId, clientID);
您可以通过将FF替换为{arg}来设置字母。您可以通过调用dropdownlist
dropdownlist.SelectedValue
获取值
+
答案 1 :(得分:0)
我将假设这个问题不仅仅是关于格式化文本,还涉及多个并发用户的上下文中的id连续性。有两种情况:
您希望在保存表单之前获取自动生成的ID 并将其显示给用户。
如果是这种情况,由于用户并发性,它非常棘手。如果2个用户将打开表单,则必须为彼此分配下一个自动递增的值(可能形成数据库或其他持久存储)。如果你这样做,他们会有连续的ID。但是,如果第一个用户在第二个用户填写表单时取消该表单,这将破坏该字段的自动递增部分的连续性(第二个用户已经具有正在跳过该表单的ID,该表已被取消)。作为此方案的唯一解决方法,您必须打破ID连续性或在使用新值保存后替换它(这没有多大意义)。
在保存表单后,您将向用户显示自动生成的ID。
这很容易做到,而且(在我看来)最好的方法是将用户选项(A/B/C/D
),最终也是一年的最后两位数发送到数据库存储过程,它将通过字符串连接处理自动生成的id的创建。之后您需要做的就是从数据库中返回自动生成的ID。
<强> [UPDATE] 强>
如果您选择第二种情况,我会发布一个示例,说明您必须做的事情。我假设您正在使用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
应该是全部。