c# - net - Deselecciona todas las filas en datagridview
selectedrows datagridview c# (9)
Tengo dos vistas de datos, y cuando hago clic en uno de ellos, me gustaría anular la selección de toda la selección en la segunda vista de datos, intenté esto, pero nada funciona:
firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;
no funciona,
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;
}
}
no funciona,
firstItemsDataGridView.Rows[0,-1].Selected = true;
no funciona demasiado
He establecido el modo de selección en la selección de fila completa, y no tengo idea de cómo lograr mi objetivo.
¡muchas gracias!
Asegúrese de que todas las filas estén deseleccionadas (dataGridView.Rows [...]. Seleccionado = falso)
La fila cero está seleccionada por defecto, así que configure dataGridView.Rows [0] .Selected = false al abrir DataGridView y siempre que las otras opciones estén configuradas para que el usuario no pueda seleccionar, no tendrá, y mantendrá, nada seleccionado.
Como dijo @Taw en los subcomentarios para la respuesta principal: "¡No lo llames demasiado pronto!" .
En mi caso el comportamiento por defecto no funciona en absoluto. Mi caso - datagrid en la pestaña de control de pestañas y no funcionó si esa pestaña no se muestra antes!
Ese truco funciona a la perfección:
AnyTabControl.SelectedTab = FirsTab;
gridModules.ClearSelection(); //placed at first tab
AnyTabControl.SelectedTab = SecondTab; //that tab i would like to show first
Como resultado: la segunda pestaña se muestra al usuario y cuando hace clic en la primera selección, no aparecerá.
Dado que no hay respuesta, utilicé esta respuesta en otras publicaciones y me encontré con el mismo problema de la primera fila que se seleccionó y no fue posible deseleccionar:
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;
}
}
Este es un pequeño truco, la única forma de ver que se selecciona una fila es mediante la primera columna (no la columna [0], sino la única). Cuando haga clic en otra fila, ya no verá la selección azul, solo la flecha indica qué fila ha seleccionado.
SOLUCIÓN:
Descubrí por qué mi primera fila estaba seleccionada por defecto y descubrí cómo no seleccionarla por defecto.
Por defecto, mi vista de datos fue el objeto con la primera pestaña en el formulario de Windows. Hacer que la pestaña se detenga primero en otro objeto (tal vez deshabilitar tabstop para el datagrid funcionará) desactivada seleccionando la primera fila
Intenté esto y está funcionando para mí:
for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
dataGridView1.Rows[i].Selected = false;
}
Si usa WPF y desea mantener un patrón de diseño de MVVM, puede enlazar ambos elementos seleccionados a la misma propiedad, de modo que cuando seleccione uno, el otro se deseleccionará automáticamente.
prueba algo como esto
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}">
* Solo usé una clase singleton porque esto funcionará en diferentes vistas en diferentes instancias, puedes usar una clase regular si estás en la misma vista.
Tenga en cuenta que IsAsync = Verdadero en el xmal, si planea usar una clase singleton en diferentes vistas, no funcionará sin ella.
Solo usa:
dgvName.ClearSelection ();
Una respuesta en NullSkull resolvió el problema para mí, que era que la celda en la fila 0, columna 0 para el control datagridview siempre se seleccionaba en la carga del formulario y no se podía deseleccionar a pesar de llamar a ClearSelection dentro del método constructor del formulario. Solo tuve que llamar a ClearSelection en el evento Form_Load. http://www.nullskull.com/q/10066166/how-to-deselect-the-first-row-when-the-form-i-loaded-in-datagridview-in-windows-application.aspx
// no selection in dgv at the begening
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
dataGridView1.ClearSelection();
Deberia trabajar. ¿Tal vez tienes un código que selecciona automáticamente las filas que se activan?