首先,我的编程概念并不是很好,所以我甚至不确定我的问题是否有正确的选择。无论如何,这是我面临的问题:
private void gridCommsEqp_OnSelectionChanged(object sender, SelectionChangeEventArgs e)
{
var temp = (CommsEqp) gridCommsEqp.SelectedItem;
var commItems = new List<CommsItem>(issueAdapt.getCommsItemsByEqpID(temp.EqpID));
}
这里我试图通过我的DataGrid根据所选的装备(只能选择一个)获得正确的Comms Item。每次选择更改时,它都会更新与该装备相对应的新项目集。
这是我的“getCommsItemsByEqpID”方法:
public IEnumerable<CommsItem> getCommsItemsByEqpID(int eqpID)
{
DataTable commItem = issueTransactions.getCommsItemsByEqpID(eqpID);
var listCommsItems = new List<CommsItem>((from DataRow row in commItem.Rows
select new CommsItem((int)row["ItemID"],
(string)row["cardNO"],
(string)row["serial"])).ToList());
return listCommsItems;
}
问题是,每次选择更改时,我的代码将继续添加到列表中,而不是获取新实例。因此,例如,在通过多次单击datagrid的不同行来讨论选择之后,我将获得一个包含之前选择的所有行的多个equipID的列表。我该如何避免这种情况?
虽然我可以立即分配列表,但我尝试创建新实例以查看它是否有帮助,如上所示。我还认为“select new CommsItem”将创建一个对象类的新实例,因此不会保留以前的记录。但它仍然会给我一个以前所有项目的综合列表。
提前感谢您的帮助!
编辑:按要求显示更多代码
public DataTable getCommsItemsByEqpID(int eqpID)
{
var sqlString = String.Format("SELECT ItemID, cardNo,
serial FROM tblCommsItem WHERE EqpID = {0}", eqpID);
establishDB(sqlString);
ad.Fill(ds, "CommsItems");
conn.Close();
return ds.Tables["CommsItems"];
}
private void establishDB(string sqlString)
{
command.CommandText = sqlString;
conn = connectDB();
ad.SelectCommand = command;
command.Connection = conn;
}
private static SqlConnection connectDB()
{
var conn = new SqlConnection();
string connString = ConfigurationManager.ConnectionStrings["SecureDB"].ToString();
conn.ConnectionString = connString;
conn.Open();
return conn;
}
编辑2:显示更多代码:
private void gridCommsEqp_OnSelectionChanged(object sender, SelectionChangeEventArgs e)
{
var temp = (CommsEqp) gridCommsEqp.SelectedItem;
var commItems = new List<CommsItem>(issueAdapt.getCommsItemsByEqpID(temp.EqpID));
if (commItems[0].CardNO == "" && commItems[0].Serial == "")
{
gridCommsItem.Columns.Clear();
gridCommsItem.MaxColumnWidth = Double.PositiveInfinity;
var gridColumn = new GridViewColumn{Header = "This item is not serialized. You can directly select the quantity.", Width = gridCommsItem.Width - 50, HeaderTextAlignment = TextAlignment.Center};
gridCommsItem.Columns.Add(gridColumn);
gridCommsItem.ShowGroupPanel = false;
gridCommsItem.IsEnabled = false;
}
}
答案 0 :(得分:0)
我怀疑的问题可能是您在每次填充之前没有清除DataSet和DataTable中的数据。在将数据填充到DataSet之前,请清除DataSet和DataTable中的内容。
原因是这一行:
ad.Fill(ds, "CommsItems");
在此处设置调试器断点。每次点击后您都会看到更多的累积记录。