我正在使用datagridview组合框来解决问题和子问题 . 在选择问题时,根据问题填充其子问题组合框数据源 .
为了更新我正在使用的子问题
private void dataGridView2_CellValueChanged_1(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.ColumnIndex == dataGridView2.Columns[8].Index && e.RowIndex>-1)
{
DataGridViewComboBoxCell cell = dataGridView2.Rows[e.RowIndex].Cells[dataGridView2.Columns["KeyProblemDescription"].Index] as DataGridViewComboBoxCell;
if (cell == null)
return;
Guid primaryProblem = new Guid(dataGridView2.Rows[e.RowIndex].Cells[dataGridView2.Columns["PrimaryKeyProblem"].Index].Value.ToString());
cell.DataSource = dbCalling.getPrimaryKeyProblemDescription(primaryProblem);
cell.DisplayMember = "Name";
cell.ValueMember = "Id";
}
}
catch (Exception)
{
}
}
public DataTable getPrimaryKeyProblemDescription(Guid keyProblem)
{
try
{
using (SqlCommand com = new SqlCommand(@"SELECT [Id] ,[KeyProblemDescription] as Name
FROM [KeyProblemDescription] where [PsfKeyProblemId][email protected] "))
{
com.Parameters.AddWithValue("@keyProblem", keyProblem);
return selectDataTable(com);
}
}
catch (Exception e)
{
throw e;
}
}
public DataTable selectDataTable(SqlCommand com)
{
try
{
DataTable datatable = new DataTable();
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlDataAdapter sda = new SqlDataAdapter())
{
com.Connection = con;
sda.SelectCommand = com;
con.Open();
sda.Fill(datatable);
return datatable;
}
}
}
catch (Exception ex)
{
throw ex;
}
}
它在我第一次选择问题时工作正常,但是当我从数据库中获取问题和子问题时,它给出异常datagridview组合框子问题值无效 . 这背后的原因是子问题数据源没有根据问题填充 . 我怎么能摆脱这个 .
编辑
当我感觉数据源单元格值更改事件仅针对行索引-1触发时,为什么呢?不适合1,2,3 ......
3 回答
代码看起来很好,除了你的第二个if语句似乎不完整 .
尝试
鉴于你的第二个
if
缺少一些括号,id期望你已经收到语法错误你得到的例外似乎是:
在这种情况下,问题是您绑定到新的值列表,但所选的Id仍然不在新列表中 . 您可以通过设置
cell.Value = null
或直接将其设置为现有新ID来清除当前值 .您可以在数据行单元格编辑事件触发时生成单独的组合框值 . 以下代码将生成父代和子代,但您可以在编辑时自动生成子代,并使用其他方法填充父代,并且不会在每次编辑时更改它 .