【发布时间】:2011-06-21 07:47:44
【问题描述】:
我正在使用 C# 2008 Windows 窗体应用程序。
在我的项目中有一个TextBox 控件,我想为样本 s00 自动生成数字,接下来当我再次返回表单时,它应该像 s01、s02、s03 一样递增..... .喜欢这样
请帮帮我
【问题讨论】:
标签: c# .net winforms auto-increment
我正在使用 C# 2008 Windows 窗体应用程序。
在我的项目中有一个TextBox 控件,我想为样本 s00 自动生成数字,接下来当我再次返回表单时,它应该像 s01、s02、s03 一样递增..... .喜欢这样
请帮帮我
【问题讨论】:
标签: c# .net winforms auto-increment
很简单。保留一个变量来保留当前的数字。
int incNumber = 0;
然后点击按钮,生成这样的数字字符串:
string nyNumber = "s" + incNumber.ToString("00");
incNumber++;
【讨论】:
按照 Øyvind Knobloch-Bråthen 的建议进行操作,但如果您希望在 form 为 Deactivated 和 Activated 时自动完成(你回到表格并给它焦点)然后你可以做这样的事情。
仅当您确定框中的文本将始终采用上述格式时才有效
this.Activated += (s, ev)=>{
string tmp = textbox1.Text;
int num = String.Substring(1) as int;
if(nuum != null)
{
num++;
textbox1.Text = "s" + num.Tostring();
}
};
【讨论】:
正如 Øyvind Knobloch-Bråthen 所说:使用变量跟踪整数。只有你应该像这样格式化它(微软首选):
int incNumber = 0;
string formattedIncNumber = String.Format("s{0:D2}", incNumber);
incNumber++;
或者如果你想用少一行代码来做:
int incNumber = 0;
string formattedIncNumber = String.Format("s{0:D2}", incNumber++);
有关格式化整数的完整参考,请参阅 MSDN。
【讨论】:
上面的 oyvind-knobloch-brathen 的一个稍微好一点的变体:
int incNumber=0;
s + String.Format("{0:00}", incNumber);
incNumber++;
//s00, s01, s02.如果你想要,比如说,0001-9999 的范围,只需将“00”更改为“0000”等。
【讨论】:
试试这个自动生成数字和自动递增数字:
// Stock is table name
// metal id is unique number that is auto generated as well as auto incremented
private void textBox9_TextChanged(object sender, EventArgs e)
{
string s = "select max(metalid)+1 from stock";
SqlCommand csm = new SqlCommand(s, con);
con.Open();
csm.ExecuteNonQuery();
SqlDataReader dd = csm.ExecuteReader();
while (dd.Read())
{
int n = dd.GetInt32(0);
textBox1.Text = n.ToString();
}
con.Close();
}
【讨论】:
另一种单行方法是:
string sampleNum = "s" + (counter++).ToString("00");
counter定义如下:
int counter= 0;
【讨论】:
如果字符串的文本部分未知(字符串末尾有或没有数字),此函数的变体可能会有所帮助:
private string increment_number_at_end_of_string(string text_with_number_at_the_end)
{
string text_without_number = text_with_number_at_the_end.TrimEnd('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
string just_the_number = text_with_number_at_the_end.Substring(text_without_number.Length);
int number = -1;
if (int.TryParse(just_the_number, out number))
{
return text_without_number + (number + 1).ToString();
}
return text_with_number_at_the_end;
}
【讨论】:
{ try { //madhura// SqlCommand cmd1 = new SqlCommand(@"select 'Column_name'+ REPLACE(STR(MAX(CAST(Right(Column_name,5) as int)+1 ),6),SPACE(1),'0') as Column_name from TabelName ", con); SqlDataAdapter da = new SqlDataAdapter(cmd1); DataTable dt = new DataTable(); da.Fill(dt);
if (dt.Rows[0]["Column_name'"].ToString() == null) { Label1.Text = "DMBP-000001"; } else{ Label.Text=dt.Rows[0]["Column_name'"].ToString(); } } 捕捉 { } }
【讨论】:
这是在 C# 中生成器自动递增 id 的解决方案,不需要增加或做任何事情。它会起作用的。每当创建一个新对象时,它的值就会增加 1。
public class Employee
{
static long AutoId = 0;
public long Id { get; private set; } = ++AutoId;
public string EmployeeName { get; set; }
public string Address { get; set; }
}
【讨论】: