刷新WPF中的Datagrid c#

时间:2014-06-06 02:18:23

标签: c# wpf datagrid

我有这个项目,我必须在我的数据网格中添加文件,然后当我点击它时,我可以编辑或删除我添加的文件。这是我的表格的示例屏幕截图

enter image description here

单击“添加”时,文本框中的文件将添加到数据网格中。它确实有效。

然后当我点击数据网格中的数据时,文件名将被插入我的文本框中,以便我可以编辑它。然后,当我单击编辑时,网格必须刷新显示已编辑的文件。与删除相同。

问题是当我尝试编辑或删除我的文件并刷新网格时,显示错误。

我确定文件已被编辑/删除,但我没有刷新我的网格,而是给了我错误。

enter image description here

这是我刷新网格的代码。每当我点击添加/编辑/删除按钮

时,我都会调用此方法
 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;
        }
    }

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

我从你所分享的内容中看到的是,错误是指索引-1处的行。

由于任何索引都从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强大的绑定框架将处理删除或添加或刷新