取消选择数据网格视图中的所有行
本文关键字:视图 选择 数据 数据网 网格 取消 | 更新日期: 2023-09-27 18:07:40
我有两个数据网格视图,当我点击其中一个时,我想取消选择第二个数据网格中的所有选择,我尝试过,但没有效果:
firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;
不工作,
firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
item.Selected = false;
foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
itemCell.Selected = false;
}
}
不工作,
firstItemsDataGridView.Rows[0,-1].Selected = true;
也不起作用。
我已经将选择模式设置为全行选择,我不知道如何实现我的目标
非常感谢!
dataGridView1.ClearSelection();
应该有效。也许您有自动选择被触发的行的代码?
NullSkull的一个答案解决了我的问题,即datagridview控件的第0行第0列的单元格在表单加载时始终处于选中状态,尽管在表单的构造函数方法中调用了ClearSelection,但仍无法取消选中。我只需要在Form_Load事件中调用ClearSelection。http://www.nullskull.com/q/10066166/how-to-deselect-the-first-row-when-the-form-i-loaded-in-datagridview-in-windows-application.aspx
由于没有答案,我在其他帖子中使用了这个答案,我遇到了第一行被选中而无法取消选择的相同问题:
Color blue = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;
foreach (DataGridViewRow r in datagridIncome.Rows)
{
if (r.Cells[5].Value.ToString().Contains("1")) {
r.DefaultCellStyle.BackColor = blue;
r.DefaultCellStyle.SelectionBackColor = blue;
r.DefaultCellStyle.SelectionForeColor = letters;
}
else {
r.DefaultCellStyle.BackColor = red;
r.DefaultCellStyle.SelectionBackColor = red;
r.DefaultCellStyle.SelectionForeColor = letters;
}
}
这是一个小技巧,你能看到一行被选中的唯一方法是通过第一列(不是列[0],而是一列(。单击另一行时,将不会再看到蓝色选择,只有箭头指示已选择的行。
解决方案:
我发现了为什么我的第一行是默认选择的,并发现了如何在默认情况下不选择它。
默认情况下,我的datagridview是在windows窗体上具有第一个制表位的对象。使制表位首先在另一个对象上停止(可能完全禁用数据网格的制表位(禁用选择第一行
只需使用:
dgvName.ClearSelection((;
我试过这个,它对我有效:
for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
dataGridView1.Rows[i].Selected = false;
}
确保取消选择所有行(dataGridView.rows[…].Selected=false(
行零默认为已选择,因此在打开dataGridView时设置dataGridView.Rows[0]。selected=false,只要设置了其他选项,用户就无法选择,那么您将不会选择任何内容。
// no selection in dgv at the begening
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
如果您使用WPF并希望维护MVVM设计模式,您可以将两个选定项绑定到同一属性,这样当您选择其中一个时,另一个将自动取消选择。
试试这个
public class SingletonClass
{
private static SingletonClass _Instance;
public static SingletonClass Instance
{
get
{
if (_Instance == null)
_Instance = new SingletonClass();
return _Instance;
}
} // End Property Instance
private object _SelectedItem;
public object SelectedItem
{
get { return _SelectedItem; }
set { _SelectedItem = value; }
} // End Selected Item
}
<DataGrid Name="Datagrid1" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">
<DataGrid Name="Datagrid2" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">
*我只使用了singleton类,因为这将在不同的实例中跨不同的视图工作,如果您在同一个视图中,则可以使用常规类。
请注意xmal上的IsAsync=True,如果您计划在不同的视图中使用singleton类,没有它就无法工作。
正如@Taw在顶部答案的子注释中所说的那样-"不要叫得太早!">。
在我的情况下,默认行为根本不起作用。我的案例-tabControl的选项卡中的数据网格,如果该选项卡以前没有显示,它就不起作用!
这个破解就像一个魅力:
AnyTabControl.SelectedTab = FirsTab;
gridModules.ClearSelection(); //placed at first tab
AnyTabControl.SelectedTab = SecondTab; //that tab i would like to show first
结果:第二个选项卡显示给用户,当他点击第一个选择时,将不会出现。