我有一个表单用于我的更新方法,表单是详细视图。在文本框旁边,我有一个列表框,显示数据库表中所有名称的名称。在列表框下我还有一个额外的文本框,可以快速搜索名称,以防用户想要输入。
当我更新其中一个名称时,例如将John更改为Jonathan,数据库使用新名称进行更新,因为我已在sql server上检查过,但列表框中的名称不会更改!通过将当前选择列表框的位置移动到movefirst(),有一种肮脏的方法来解决这个问题。但是,在列表框下面,我有一个快速搜索的文本框,正如我所提到的,所以我在搜索文本框中输入Jonathan,但没有出现。但是,如果我输入以前的名字John,那么我会在表格中获得该行的详细信息。
我有办法解决这个问题吗?
更新1:
我已尝试将列表框数据源设为null,然后再次重新分配它,但它无法正常工作。我把我的代码放在下面的更新表格中。
命名空间WindowsFormsApplication1 { public partial class updateContact:Form { public updateContact() { 的InitializeComponent(); }
private void updateContact_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'tblcontactsupdate.tblContacts' table. You can move, or remove it, as needed.
this.tblContactsTableAdapter.Fill(this.tblcontactsupdate.tblContacts);
}
private void btnUpdateContact_Click(object sender, EventArgs e)
{
int x;
Program.da.UpdateCommand = new SqlCommand("Update tblContacts SET FIRSTNAME = @FIRSTNAME, LASTNME = @LASTNME WHERE ID = @ID", Program.cs);
Program.da.UpdateCommand.Parameters.Add("@FIRSTNAME", SqlDbType.VarChar).Value = fIRSTNAMETextBox.Text;
Program.da.UpdateCommand.Parameters.Add("@LASTNME", SqlDbType.VarChar).Value = lASTNMETextBox.Text;
Program.da.UpdateCommand.Parameters.Add("@ID", SqlDbType.VarChar).Value = iDTextBox.Text;
Program.cs.Open();
x = Program.da.UpdateCommand.ExecuteNonQuery();
Program.cs.Close();
if (x >= 1)
{
MessageBox.Show("Record(s) has been updated");
Program.ds.Clear();
Program.da.Fill(Program.ds);
txtfindUpdatecontact.Text = "";
//lbupdateContact.DataSource = null;
//lbupdateContact.DataSource = this.tblcontactsupdate.tblContacts;
}
}
private void txtfindUpdatecontact_TextChanged(object sender, EventArgs e)
{
if (!txtfindUpdatecontact.Text.Equals(""))
{
this.tblContactsBindingSource.Filter = "FIRSTNAME = '" + txtfindUpdatecontact.Text + "'";
}
else
{
this.tblContactsBindingSource.RemoveFilter();
}
}
private void lbupdateContact_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void iDTextBox_TextChanged(object sender, EventArgs e)
{
}
private void fIRSTNAMETextBox_TextChanged(object sender, EventArgs e)
{
}
private void lASTNMETextBox_TextChanged(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:2)
更新来源后,您必须再次设置列表框的DataSource
。
如下所示:这是我的数据:
public class Person
{
public int Age { get; set; }
public string Name { get; set; }
}
public class MyDataSource
{
public static List<Person> Persons = new List<Person>
{
new Person{Age=30,Name="Ram"},
new Person{Age=33,Name="Rahim"},
};
}
然后在表单的构造函数中,您可以执行:
listBox1.DataSource = MyDataSource.Persons;
listBox1.DisplayMember = "Age";
然后进行更新,如下所示:
private void button1_Click(object sender, EventArgs e)
{
MyDataSource.Persons[0].Age = 45;
listBox1.DataSource = null;
listBox1.DataSource = MyDataSource.Persons;
listBox1.DisplayMember = "Age";
}
根据您的需要,这只是一个示例更改代码。
答案 1 :(得分:0)
如果您的DataSource是DataTable,您所要做的就是调用AcceptChanges(),如下所示:
listBox.DataSource = null;
((DataTable)listBox.DataSource).AcceptChanges();