Avatar billede peter_svendsen Nybegynder
30. januar 2006 - 11:57 Der er 2 kommentarer og
1 løsning

Sletning af række i DataGrid

Når der slettes en række i mit datagrid skal den kaskade ændre værdien i et FK felt i en anden tabel (eller slette rækkerne). Dette er nemt nok, men giver nogle problemer da FK feltet ikke må være tomt. Jeg ønsker en mulighed for at advare brugeren inden der enten slettes data eller laves data der ikke lever op til kraevne.

Min plan er at fange et KeyDown event når der er valgt en række.

dg.KeyDown bliver kun fanget hvis jeg sætter fokus i headeren af datagriddet.

En alternativ løsning jeg har kigget på er:

private void minTabel_RowDeleted(object sender, DataRowChangeEventArgs e)
{
  if(MessageBox.Show("Vil du slette rækken?","Vil du slette",MessageBoxButtons.YesNo) == DialogResult.No)
    e.Row.RejectChanges();
}

Jeg er bare lidt nervøs for denne løsning, og den fanger ikke automatisk de ændringer der laves i andre tabeller pga. kaskade.
Avatar billede peter_svendsen Nybegynder
30. januar 2006 - 11:58 #1
Windows program

Gemme i DataSet

Udvikler i Visual Studio .NET 2003
Avatar billede peter_svendsen Nybegynder
02. februar 2006 - 12:06 #2
Det er lykkedes at finde rimelig fornuftig løsning. Der er desværre stadig nogle situationer hvor man ikke fanger eventet, så den er ikke perfekt.

Jeg lader spørgsmålet forblive åbent, hvis der er nogen der ved hvordan jeg vil kunne fange eventet hvis musen slippes når den ikke længere er over Datagrid'et eller hvis man bruger SHIFT+SPACE til at vælge en række i Datagrid'et.

------------------------

public class DataGridMedDelCheck : DataGrid
{
  const int WM_KEYDOWN = 0x100;

  public override bool PreProcessMessage( ref Message msg )
  {
    Keys keyCode = (Keys)(int)msg.WParam & Keys.KeyCode;
    if(msg.Msg == WM_KEYDOWN && keyCode == Keys.Delete)
    {
      if(MessageBox.Show("Sletning af en række vil slette værdien de steder den er brugt.\n\nØnsker du stadig at slette de valgte rækker?", "Slet rækker?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
        return true;
    }
    return base.PreProcessMessage(ref msg);
  }

  protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
  {
  if (this.HitTest(e.X, e.Y).Type == DataGrid.HitTestType.RowHeader)
    this.Focus();

  base.OnMouseUp(e);
  }
}
Avatar billede peter_svendsen Nybegynder
23. marts 2006 - 12:18 #3
Nå, men det ser ikke ud til der er yderligere kommentarer her, så jeg lukker tråden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester