gebundenes DataGridView mit selbst hinzugefügten Spalten

17/04/2009 - 15:32 von Michael Moll | Report spam
Hallo an die Experten,

ich habe ein typisiertes Dataset. Eine Tabelle daraus bind ich an ein
Datagridview (mit dem Designer Tabelle auf Form gezogen). Nun habe ich der
Datagridview eine weitere Spalte mit einer Checkbox hinzugefügt.
Wenn ich hier nun ein paar Hàkchen setze und dann auf irgendeine Spalte neu
sortiere, so sind die Hàkchen weg :-(.
Làßt sich das irgendwie umgehen?


Mfg


Micha
 

Lesen sie die antworten

#1 Frank Dzaebel
17/04/2009 - 18:08 | Warnen spam
Hallo Michael,

Hallo an die Experten,
ich habe ein typisiertes Dataset. Eine Tabelle daraus bind
ich an ein Datagridview (mit dem Designer Tabelle auf
Form gezogen). Nun habe ich der Datagridview eine weitere
Spalte mit einer Checkbox hinzugefügt.
Wenn ich hier nun ein paar Hàkchen setze und dann auf
irgendeine Spalte neu sortiere, so sind die Hàkchen weg :-(.



Das Sortieren von ungebundenen Spalten im
gebundenen Modus wird nicht unterstützt.

[Spaltenssortiermodi im DataGridView-Steuerelement von Windows Forms]
http://msdn.microsoft.com/de-de/lib...cxcdy.aspx
_____________

Aber über den virtuellen Modus geht das:

int checkColIndex = 0;
int primaryKeyIndex;
private Dictionary<string, bool> store new Dictionary<string, bool>();

private void Form1_Load(object sender, EventArgs e)
{
this.personTableAdapter.Fill(this.frankDataSet.Person);

dgv.Columns.Insert(checkColIndex, new DataGridViewCheckBoxColumn());
DataColumn dc = frankDataSet.Person.PrimaryKey[0];
primaryKeyIndex = dc.Ordinal + 1;
dgv.CellValueNeeded += new
DataGridViewCellValueEventHandler(dgv_CellValueNeeded);
dgv.CellValuePushed += new
DataGridViewCellValueEventHandler(dgv_CellValuePushed);
dgv.VirtualMode = true;
}

void dgv_CellValuePushed(object sender,
DataGridViewCellValueEventArgs e)
{
if (dgv[1, e.RowIndex].Value != null)
if (store.ContainsKey(dgv[primaryKeyIndex,
e.RowIndex].Value.ToString()))
store[dgv[1, e.RowIndex].Value.ToString()] bool.Parse(e.Value.ToString());
else
store.Add(dgv[primaryKeyIndex, e.RowIndex].
Value.ToString(), bool.Parse(e.Value.ToString()));
}

void dgv_CellValueNeeded(object sender,
DataGridViewCellValueEventArgs e)
{
if (dgv[1, e.RowIndex].Value != null)
if (store.ContainsKey(dgv[primaryKeyIndex,
e.RowIndex].Value.ToString()))
e.Value = store[dgv[primaryKeyIndex,
e.RowIndex].Value.ToString()];
else
e.Value = false;
}
_______

Ggf. dazu von Interesse:

[Nutzung grosser Datenmengen beim DataGridView]
http://www.dzaebel.net/DgvVirtual.htm


ciao Frank
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Ähnliche fragen