我有这个项目,我必须在我的数据网格中添加文件,然后当我点击它时,我可以编辑或删除我添加的文件。这是我的表格的示例屏幕截图
单击“添加”时,文本框中的文件将添加到数据网格中。它确实有效。
然后当我点击数据网格中的数据时,文件名将被插入我的文本框中,以便我可以编辑它。然后,当我单击编辑时,网格必须刷新显示已编辑的文件。与删除相同。
问题是当我尝试编辑或删除我的文件并刷新网格时,显示错误。
我确定文件已被编辑/删除,但我没有刷新我的网格,而是给了我错误。
这是我刷新网格的代码。每当我点击添加/编辑/删除按钮
时,我都会调用此方法 public void DisplaySourceFile()
{
try
{
if (CONN.State != ConnectionState.Open)
{
CONN.Open();
}
CMD = new SqlCommand("Select sf_id as [ID], sf_name as [FILES] from [Source_File] where s_id = @s_id", CONN);
CMD.Parameters.AddWithValue("@s_id", SourceId);
DA = new SqlDataAdapter(CMD);
DT = new DataTable("Role");
DA.Fill(DT);
dataGridFile.ItemsSource = DT.DefaultView;
}
catch
{
throw;
}
finally
{
if (CONN.ToString() != String.Empty && CONN.State != ConnectionState.Closed)
CONN.Close();
}
}
在我的数据网格中选择项目时的代码:
private void dataGridFile_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
bo_source = new BO.BO_Source();
dal_source = new DAL.DAL_Source();
//Check if there is selected item
dal_source.selectedSourceFile = Convert.ToInt32((DT.Rows[dataGridFile.SelectedIndex])[0].ToString());
selectedSource = dal_source.selectedSourceFile;
btnEdit.IsEnabled = true;
btnDelete.IsEnabled = true;
btnAdd.IsEnabled = false;
if (dal_source.GetSourceFileInfo(bo_source) == true)
{
txtFileName.Text = bo_source.sf_name;
}
}
任何人都可以帮助我。
答案 0 :(得分:0)
我从你所分享的内容中看到的是,错误是指索引-1处的行。
由于任何索引都从0开始,因此无法编辑或删除-1。
因此,此方案的解决方案是管理索引
如果它跨越任何边界,则需要相应处理。
问题似乎在这里
//Check if there is selected item
dal_source.selectedSourceFile = Convert.ToInt32((DT.Rows[dataGridFile.SelectedIndex])[0].ToString());
所以也许更改它来验证
//Check if there is selected item
int selectedIndex = dataGridFile.SelectedIndex;
if(selectedIndex > -1 && selectedIndex < DT.Rows.Count)
{
dal_source.selectedSourceFile = Convert.ToInt32((DT.Rows[selectedIndex])[0].ToString());
selectedSource = dal_source.selectedSourceFile;
btnEdit.IsEnabled = true;
btnDelete.IsEnabled = true;
btnAdd.IsEnabled = false;
if (dal_source.GetSourceFileInfo(bo_source) == true)
{
txtFileName.Text = bo_source.sf_name;
}
}
这应解决您当前的问题。
MVVM方式
在这种方法中将模型与数据网格绑定为ObservableCollection,然后操纵集合而不是处理UI元素,因此WPF强大的绑定框架将处理删除或添加或刷新