如何在列表框中水平列出数据

本文关键字:水平 数据 列表 | 更新日期: 2023-09-27 18:33:05

我有一个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;
            }
        }

如何在列表框中水平列出数据

尝试这样的事情:

    .....
    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();
    .....

更新

关于您在评论中的额外问题:

您可以使用字符串。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");