0

我是编程新手,我的问题是我试图在列表框中显示多个项目,而这些项目来自本地数据库。我在本地数据库中有一个表用户,其中包含列 ID、名字、姓氏、电子邮件和地址。

我已经将 listBox 与我的本地 dababase 表“Users”绑定了,这就是我目前得到的:

private void button_ShowItems_Click(object sender, EventArgs e)
    {
        var dt = new DataTable();

        string connectionString = @"Data Source=MyDatabase;Password=xxxxxx;";

        using (var cn = new SqlCeConnection(connectionString))
        using (var cmd = new SqlCeCommand("Select * From Users", cn))
        {
            cn.Open();

            using (var reader = cmd.ExecuteReader())
            {
                dt.Load(reader);
                listBox_Users.DataSource = dt;
                listBox_users.DisplayMember = "Firstname" + "Lastname";
                listBox_Users.ValueMember = "ID";
            }
        }
    }

当我按下按钮时,它只显示“名字”而不是“姓氏”。

我得到了一个带有文本框的表单,可以将数据输入到本地数据库“用户”中,并且可以正常工作:

private void button_add_Click(object sender, EventArgs e)
{
var insertSQL = "INSERT INTO Inimesed (Firstname, Lastname, Email, Address) VALUES (Firstname, Lastname, Email, Address)";

string connectionString = @"Data Source=myDatabase;Password=xxxxxx;";
using (var cn = new SqlCeConnection(connectionString))
using (var cmd = new SqlCeCommand(insertSQL, cn))
    {
         cn.Open();

        cmd.Parameters.Add("@Firstname", SqlDbType.NVarChar);
        cmd.Parameters.Add("@Lastname", SqlDbType.NVarChar);
        cmd.Parameters.Add("@Email", SqlDbType.NVarChar);
        cmd.Parameters.Add("@Address", SqlDbType.NVarChar);

        cmd.Parameters["Firstname"].Value = textBox1_Firstname.Text;
        cmd.Parameters["Lastname"].Value = textBox2_Lastname.Text;
        cmd.Parameters["Email"].Value = textBox3_Email.Text;
        cmd.Parameters["Address"].Value = textBox4_Address.Text;
        cmd.ExecuteNonQuery();

    }

}


如果有人知道,我还有一个后续问题:我需要做什么才能使用“名字”+“姓氏”将选定的列表框值添加回文本框中?

有大量关于“如何在 C# 中将文本框项目添加到本地数据库”的教程,但没有“如何将本地数据库项目添加到文本框”的教程。我得到了所有定义的值。我应该在“foreach”命令中使用“foreach”命令、“if”命令还是“if”命令?

任何帮助都会很棒!

4

1 回答 1

1

无论出于何种原因,您都无法绑定连接 - 最好的办法是使用 Linq 创建一个包含连接本身的匿名类型 - 见下文。

var results = (from row in dt.AsEnumerable()
               select new  
               {
                   UserID = row.Field<int>("UserPK"), 
                   FirstName = row.Field<string>("FirstName"), 
                   LastName = row.Field<string>("LastName"), 
                   FullName = row.Field<string>("FirstName") + " " + row.Field<string>("LastName") 
               }).ToList();

listBox1.DataSource = results;
listBox1.DisplayMember = "FullName";
listBox1.ValueMember = "UserID";

瞧,正确显示全名。

于 2013-04-17T15:33:07.040 回答