Avatar billede spottie Nybegynder
26. maj 2006 - 01:09 Der er 9 kommentarer og
1 løsning

vedr. mulighed for at gøre tekst i datagrid kolonne klik-bar?

Goddag eksperter

Jeg ville høre derude om der er nogen der ved om man kan gøre således at når man har en Visual C# Windows, ikke WEB, applikation og man så sætter data i et datagrid ved at hjælp af datasurce, hvordan man så kan gøre sådan at f.eks. en bestemt kolonne række bliver lavet til sådan at man kan trykke på dem og få alle oplysninger ud den vej? kan man det hvis ja, nogen der ved hvordan kan vise kode til det?

Håber at høre fra nogen.

Vh spottie
Avatar billede bitsch Nybegynder
26. maj 2006 - 09:14 #1
Hvis du anvender et DataGridView har du flere muligheder. Kontrollen tilbyder direkte ColumnHeaderMouseClick og DoubleClick. Er dette ikke nok kan override DataGridViewColumn og lave din egen kolonne.
Avatar billede spottie Nybegynder
26. maj 2006 - 09:48 #2
skal så nok over i noget override.. hvordan brues override noget eksempel eller?
Avatar billede bitsch Nybegynder
26. maj 2006 - 12:59 #3
Hvis du kan nøjes med de almindelige events som beskrevet ovenfor, så skal du ikke override, men blot subscribe til eventet.
Hvis dette ikke er tilstrækkeligt, er du nødt til at lave din egen kolonne celle. For at gøre dette er du nødt til at lave din egen klasse som nedarver fra DataGridViewColumnHeaderCell.
Jeg har desværre ikke et eksempel klar for akkurat dette, men her er et link som indeholder en masse eksempler på hvorledes lu laver et Custom DataGridView
http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=7&SiteID=1
Avatar billede md_craig Nybegynder
26. maj 2006 - 22:16 #4
Som bitsch siger er det nok nemmest at benytte de events den nu en gang tilbyder... et lille eks:

private void InitializeComponent()
{
//...Andet kode
this.dgw = new System.Windows.Forms.DataGridView();
this.dgw.MouseClick += new System.Windows.Forms.MouseEventHandler(this.dgw_MouseClick);
//...Andet kode
}

private void dgw_MouseClick(object sender, MouseEventArgs e)
{
DataGridView dg = (DataGridView)sender;

int colIndex = dg.CurrentCell.ColumnIndex;
int rowIndex = dg.CurrentCell.RowIndex;
DataGridViewColumn col = dg.Columns[colIndex];

Console.WriteLine("Cell Index Clicked: {0},{1} , Collname: {2}",colIndex,rowIndex,col.Name);
}

Udskriver bare hvor der klikkes, og navnet på den overordnede kolonne, men så kan du kikke på om det var den rigtige kolonne der blev klikket i, og så gøre noget hvis det var, og ellers ikke gøre noget...

Dette gør at dette bliver kaldt lige meget hvor man klikker naturligvis, og dermed flere kald, men hvis det ikke er acceptabelt, er det svært lige at lave et ekempel da det kommer til at give meget kode mm.
Avatar billede spottie Nybegynder
27. maj 2006 - 01:28 #5
md_craig... vil gerne prøve det, men bruger visual C# 2003, kan du tilrette din kode så den passer til 2003?
Har prøvet men får en masse fejl, så håber du har tid og vil poste eksemplet i 2003 C#.

spottie
Avatar billede md_craig Nybegynder
27. maj 2006 - 09:05 #6
Det er desvære først i VS2005 jeg rigtig begyndte at bruge den kontrol... så ved ikke helt hvordan det foregår i 2003 for den er vist blevet ændret meget...

Men istedet for:
this.dgw = new System.Windows.Forms.DataGridView();
this.dgw.MouseClick += new System.Windows.Forms.MouseEventHandler(this.dgw_MouseClick);

Så:
this.dg = new System.Windows.Forms.DataGrid();
this.dg.Click += new System.Windows.Forms.EventHandler(this.dg_Click);


Og så skal metoden anturligvis passe:
private void dg_Click(object sender, EventArgs e)
{
DataGrid dg = (DataGrid)sender;

int colIndex = dg.CurrentCell.ColumnNumber;
int rowIndex = dg.CurrentCell.RowNumber;

Console.WriteLine("Cell Index Clicked: {0},{1}",colIndex,rowIndex);
}

_______________________

Prøv det, ved desvære ikke hvordan du så får yderligere info ud over et index...
Avatar billede bitsch Nybegynder
27. maj 2006 - 09:24 #7
Foregående eksempel er ellers ok, bortset fra at eksemplet ikke anvender et af de events du har brug for. nedenstående anvender ColumnHeaderDoubleClick og fyres altså hvis du dobbeltklikker på kolonne headeren.

        public Form1()
        {
            InitializeComponent();

            this.dataGridView1.ColumnHeaderMouseDoubleClick += new DataGridViewCellMouseEventHandler(dataGridView1_ColumnHeaderMouseDoubleClick);
        }

        void dataGridView1_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            MessageBox.Show("Hello World");
        }


Når du skal lytte til et event tilbyder Visual Studio dig flere muligheder (for samme resultat)

1) Du kan indtaste koden selv.
2) Du kan anvende property browseren, klikke på fanebladet for events, og dobbeltklikke på det event du vil lytte til... så indsættes koden automatisk.
3) Når man skriver += efter sit event i koden (f.eks. this.dataGridView1.ColumnHeaderMouseDoubleClick+=) fremkommer der en dialog som paster resten af koden hvis du trykker Tab).
4) Lav metoden som skal kaldes i hånden, og tilknyt den eventet enten manuelt, eller ved hjælp af property browseren på event tabsiden.

Nb. At anvennde single click på kolonne headeren vil jeg fraråde, da denne jo som bekendt bruges til at kokusere kolonnen, samt skifte sort direction (vis man anvender dette).

I det hele taget ville jeg nok overveje om der er alternativer for at få en bedre brugeroplevelse. Kan man f.eks. anvende ToolTip på kolonnen hvis informationen er begrænset. Man kan også vise informationen i et panel som synkroniceres når kolonnen får focs... (blot eksempler)
Avatar billede bitsch Nybegynder
27. maj 2006 - 09:30 #8
Nb! det er muligt at 3) først blev introduceret i VS 2005
Avatar billede md_craig Nybegynder
27. maj 2006 - 09:46 #9
Well... nu havde jeg opfattet spørgsmålet anderledes så, da jeg havde regnet med at hvert felt i hele kolonnen skulle være klikbart (og ikke kun headeren)

Så syns jeg måske lige vi skal have på plads så ^^
Avatar billede spottie Nybegynder
19. maj 2007 - 07:44 #10
lukker
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