在我的Windows应用程序中,我有一个作业代码组合框,当用户从组合框中选择一个作业代码时,它将从数据库中获取相应的数据,并将其显示在组合框下方的数据网格视图中。一切都很好,我可以加载与所选工作代码相对应的数据。
我使用了这段代码
public void loadcompljobcodecombobox()
{
completedcobcodeadapterTableAdapter cmpltjbcd = new completedcobcodeadapterTableAdapter();
cmpltjbcd.Connection = new OleDbConnection(Program.ConnStr);
DataTable dt= cmpltjbcd.GetData(int.Parse(cmbcutcode.SelectedValue.ToString()));
if (dt.Rows.Count > 0)
{
cmbjobcode.ValueMember = "jobpk";
cmbjobcode.DisplayMember = "jobcode";
txtcompanyname.Text = "companyname";
cmbjobcode.DataSource = dt;
}
else
{
MessageBox.Show("NO JobCode to be invoiced");
}
}
private void cmbjobcode_SelectedValueChanged(object sender, EventArgs e)
{
tbltoinvoicedtableTableAdapter tbltoinvce = new tbltoinvoicedtableTableAdapter();
tbltoinvce.Connection = new OleDbConnection(Program.ConnStr);
if (cmbjobcode.SelectedValue != null)
{
DataTable dt = tbltoinvce.GetDataBy(int.Parse(cmbjobcode.SelectedValue.ToString()));
dataGridView1.DataSource = dt;
}
}
现在我的要求是用户必须能够一次选择一个以上的工作代码详细信息进行开票,即如果他从工作代码中选择一个值,则应在datagridview中添加相应的数据,当他选择另一个工作代码时,应添加相应的数据作为Datagridview中的下一行。
我已经尝试了很多,并且发现任何人都无法提出想法或示例
答案 0 :(得分:1)
如果我理解正确的话,我会尝试这样的事情。这没有经过测试,但这是一个想法。
在表单级别:
private BindingList<DataRow> jobList;
然后添加到您当前的代码......
private void cmbjobcode_SelectedValueChanged(object sender, EventArgs e)
{
tbltoinvoicedtableTableAdapter tbltoinvce = new tbltoinvoicedtableTableAdapter();
tbltoinvce.Connection = new OleDbConnection(Program.ConnStr);
if (cmbjobcode.SelectedValue != null)
{
DataRow job = tbltoinvce.GetDataBy(int.Parse(cmbjobcode.SelectedValue.ToString())).Rows[0];
if (jobList == null)
{
jobList = new BindingList<DataRow>();
jobList.Add(job);
dataGridView1.DataSource = jobList;
}
else
{
if (!jobList.Contains(job));
jobList.Add(job);
}
}
}
**编辑:这是假设您的工作数据只包含一行数据,因为您的问题询问如何添加“一行”。