我有Windows Surface Tablet PC的注册申请。 它的工作非常出色,但还有一件事我需要工作:
注册的目的是在线状态(对于员工注册)或离线状态(对于学生事件注册)。
当它处于在线状态时,我们将条形码扫描到其中,其中包含6位数字+'L',进入数据库并拉出工作人员姓名和6位数代码,然后它将列出工作人员姓名按顺序放下列表框。
我要做的是列出首次输入应用程序的时间,然后当他们再次扫描相同的代码时,不再删除第一个条目,而是将另一个时间添加到现有行,例如:
第一次扫描:
Ryan Gillooly (123456) Time: 11:40
第二次扫描:
Ryan Gillooly (123456) Time: 11:40 Time: 13:26
依此类推。
以下是代码:
Object returnValue;
string txtend = textBox1.Text;
if (e.KeyChar == 'L')
{
DBConnection.Open();
}
if (DBConnection.State == ConnectionState.Open)
{
if (textBox1.Text.Length != 6) return;
{
cmd.CommandText = ("SELECT last_name +', '+ first_name from name where id =@Name");
cmd.Parameters.Add(new SqlParameter("Name", textBox1.Text.Replace(@"L", "")));
cmd.CommandType = CommandType.Text;
cmd.Connection = DBConnection;
returnValue = cmd.ExecuteScalar() + "\t (" + textBox1.Text.Replace(@"L", "") + ")";
DBConnection.Close();
if (listBox1.Items.Contains(returnValue))
{
for (int n = listBox1.Items.Count - 1; n >= 0; --n)
{
string removelistitem = returnValue.ToString();
if (listBox1.Items[n].ToString().Contains(removelistitem))
{
//listBox1.Items.Add(" " + "\t Time:" + " " + DateTime.Now.ToString("HH.mm"));
listBox1.Items.RemoveAt(n);
}
}
}
else
listBox1.Items.Add(returnValue + "\t Time:" + " " + DateTime.Now.ToString("HH.mm"));
textBox1.Clear();
System.IO.StreamWriter SaveFile = new System.IO.StreamWriter(fullFileName);
foreach (object item in listBox1.Items)
SaveFile.WriteLine(item.ToString());
SaveFile.Flush();
SaveFile.Close();
if (listBox1.Items.Count != 0) { DisableCloseButton(); }
else
{
EnableCloseButton();
}
Current_Attendance_Label.Text = "Currently " + listBox1.Items.Count.ToString() + " in attendance.";
e.Handled = true;
}
}
答案 0 :(得分:1)
尝试这样的事情:
.....
DBConnection.Close();
bool found=false;
foreach (var item in listBox1.Items)
{
var entry = item.ToString();
if (entry.Contains(returnvalue.ToString()))
{
listBox1.Items.Remove(item);
listBox1.Items.Add(entry + " extra add");
found = true;
break;
}
}
if (!found)
{
listBox1.Items.Add(returnvalue.ToString());
}
textBox1.Clear();
.....
<强>更新强>
关于评论中的额外问题:
您可以使用string.LastIndexOf查看最后添加的字词:“In”或“Out”。 然后你拿另一个。
LastIndexOf返回搜索字符串最后一次出现的索引,或者当它不存在时返回-1。
出于我的想法,你会得到类似的东西:
private string CreateNewEntry(string current)
{
var indexIn = current.LastIndexOf("in"); // Get the last index of the word "in"
var indexOut = current.LastIndexOf("out"); // Get the last index of the word out
if (indexOut > indexIn)
{
return current + " in "; // if the last "out" comes after the last "in"
}
else
{
// If the last "in" comes after the last "out"
return current + " out ";
}
}
这将返回当前条目+“ in ”或“ out ”。 Anbd然后你只需要添加额外的东西。 要调用它,请将添加句子替换为:
listBox1.Items.Add(CreateNewEntry(entry) + " extra stuff");