如何在listBox中显示多个本地数据库项?

时间:2013-04-17 14:30:37

标签: c# database textbox listbox

我是编程新手,我的问题是我试图在列表框中显示多个项目,这些项目来自本地数据库。我在本地数据库中有一个表用户,其中包含列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";
            }
        }
    }

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

我收到了一个带有textBoxes的表单,这些表单将数据输入到本地数据库“Users”中并起作用:

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

    }

}


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

有很多关于“如何在C#中将textBox项目添加到本地数据库”的教程,但没有“如何将本地数据库项目添加到textBox”。我得到了所有定义的值。 我应该在“foreach”命令中使用“foreach”命令,“if”命令或“if”命令吗?

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

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

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";

Et瞧,正确显示全名。