0

我有 2 个 Telerik 的 rad 网格。第一个是大师,第二个是细节。我可以通过按每个网格上方工具栏上的“删除”按钮来独立地从两个网格中删除行。我在两个网格的工具栏中也有“刷新”按钮。

问题在于细节网格。当我删除项目时,网格不会刷新。调用 Rebind 方法没有帮助。唯一有帮助的是按主网格工具栏中的“刷新”按钮,然后用鼠标在主网格中选择先前选择的行。之后,我可以看到刷新的详细信息网格。

所以,我不需要按主网格工具栏中的“刷新”按钮并通过鼠标选择主网格中的行。我可以以编程方式刷新主网格,并且只想以编程方式重新选择最初选择的项目。我试过这个:

item.Selected = true;

但是,它只会在主网格中直观地选择项目,而不会刷新详细网格。

那么,如何以编程方式选择主网格中的项目以获得与鼠标选择相同的效果?

先感谢您。

4

1 回答 1

0

我刚刚意识到您可能对两个网格使用不同的 DataSource,但指向同一个数据库,对吗?我下面的示例对两个网格使用相同的数据源。但是,我通过使某些列不可见来制作详细视图与普通视图。也许这个策略可以解决你的问题?

我的第一个想法是尝试实现 SelectionChanged 事件,或者如果不是,则实现 SelectionChanging 事件。在那里刷新一下。但我最终并没有那样做。

我写了一个小程序如下。只要它不是删除,它就会将编辑保存到磁盘并进行任何行更改(单击按钮时我无法保存删除编辑,它在删除命令上给出了空指针异常)。它还在关闭程序之前保存更改(以便随后也保存任何删除行)。我确实发现 deleteOne 和 deleteTwo 按钮(分别从第一个或第二个网格中删除)确实会导致两个网格中都发生删除。因此,如果适用于您的情况,您可以使用 radGridView1.Rows.Remove(row) 或 RemoveAt(i) 命令吗?

另一种可能性是,如果刷新不起作用,您可以将 DataSource 设置为 null,然后在删除该行后再次将其设置为数据源。这有点激烈,但如果这是唯一有效的方法?我说的是两个网格的数据源。

我的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;

namespace RadControlsWinFormsApp1
{
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
    public RadForm1()
    {
        InitializeComponent();
    }

    private void RadForm1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'testdbDataSet.Customers' table. You can move, or remove it, as needed.
        this.customersTableAdapter.Fill(this.testdbDataSet.Customers);
        radGridView1.Columns["Address"].IsVisible = false;
    }

    private void radGridView1_RowsChanged(object sender, Telerik.WinControls.UI.GridViewCollectionChangedEventArgs e)
    {
        // if removing don't update, because if my delete button is pressed this
        // will otherwise cause all sorts of problems and freezes the grid
        if (e.Action != NotifyCollectionChangedAction.Remove)
        {
            try
            {
                customersTableAdapter.Update(testdbDataSet);
            }
            catch (DBConcurrencyException ex)
            {
                // unable to save right now, don't worry about it
            }
        }
        radGridView2.Refresh();
    }

    private void butDeleteOne_Click(object sender, EventArgs e)
    {
        bool haveRemoved = false;
        for (int i = 0; i < radGridView1.Rows.Count && !haveRemoved; ++i)
        {
            GridViewRowInfo row = radGridView1.Rows[i];
            if (row.IsSelected)
            {
                haveRemoved = true;
                radGridView1.Rows.RemoveAt(i);
            }
        }
    }
    private void butDeleteTwo_Click(object sender, EventArgs e)
    {
        bool haveRemoved = false;
        for (int i = 0; i < radGridView2.Rows.Count && !haveRemoved; ++i)
        {
            GridViewRowInfo row = radGridView2.Rows[i];
            if (row.IsSelected)
            {
                haveRemoved = true;
                radGridView2.Rows.RemoveAt(i);
            }
        }
    }

    private void radGridView2_RowsChanged(object sender, GridViewCollectionChangedEventArgs e)
    {
        // if removing don't update, because if my delete button is pressed this
        // will otherwise cause all sorts of problems and freezes the grid
        if (e.Action != NotifyCollectionChangedAction.Remove)
        {
            try
            {
                customersTableAdapter.Update(testdbDataSet);
            }
            catch (DBConcurrencyException ex)
            {
                // unable to save right now, don't worry about it
            }
        }
        radGridView1.Refresh();
    }

    private void RadForm1_FormClosing(object sender, FormClosingEventArgs e)
    {
        // ensure all data is saved back into database on close
        customersTableAdapter.Update(testdbDataSet);
    }
    //private void radGridView1_CellEndEdit(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
    //{
    //}
}
}
于 2012-07-18T07:39:55.813 回答