Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Hexadecimale waarde weergeven in datagridview

Pagina: 1
Acties:

  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Ik blijf jullie lastig vallen de laatste tijd. ;)
Ik heb al even gezocht op msdn en internet maar nog geen antwoord tegengekomen.

Ik probeer het volgende in een datagridview te bereiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Nr] Name      Type      Addr     Off    Size   ES Flg Lk Inf Al
........
[ 4] .dynsym   DYNSYM    08048174 000174 000060 10   A  5   1  4
........
[11] .plt      PROGBITS  08048290 000290 000030 04  AX  0   0  4
[12] .text     PROGBITS  080482c0 0002c0 0001d0 00  AX  0   0  4
........
[20] .got      PROGBITS  080495d8 0005d8 000004 04  WA  0   0  4
[21] .got.plt  PROGBITS  080495dc 0005dc 000014 04  WA  0   0  4
........
[22] .data     PROGBITS  080495f0 0005f0 000010 00  WA  0   0  4
[23] .bss      NOBITS    08049600 000600 000008 00  WA  0   0  4
........
[26] .symtab   SYMTAB    00000000 000c6c 000480 10     27  2c  4

Dat is eigenlijk al compleet gelukt. Ik zou alleen graag willen dat de waarden in mijn datagridview als hexadecimaal worden weergegeven.
Iemand een idee hoe ik dat voor elkaar krijg?

Ik wijs mijn waarden op de volgende manier toe:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int teller2 = 0; teller2 < (elfHeader.e_shnum); teller2++)
{
    dataGridView1[0, teller2].Value = "[" + (teller2) + "]";
    dataGridView1[1, teller2].Value = sectionHeaderName[teller2];
    dataGridView1[2, teller2].Value =  sectionHeader[teller2].sh_type;
    dataGridView1[3, teller2].Value = sectionHeader[teller2].sh_addr;
    dataGridView1[4, teller2].Value = sectionHeader[teller2].sh_offset;
    dataGridView1[5, teller2].Value = sectionHeader[teller2].sh_size;
    dataGridView1[6, teller2].Value = sectionHeader[teller2].sh_entsize;
    dataGridView1[7, teller2].Value = sectionHeader[teller2].sh_flags;
    dataGridView1[8, teller2].Value = sectionHeader[teller2].sh_link;
    dataGridView1[9, teller2].Value = sectionHeader[teller2].sh_info;
    dataGridView1[10, teller2].Value = sectionHeader[teller2].sh_addralign;
}

Verwijderd

C#:
1
2
3
byte b = (byte)'A';
byte c = (byte)'B';
Console.WriteLine("byte b: {0}, byte c {1}", b, c);

Levert de hexadecimale waarde als uitvoer, je moet er even mee spelen om het voor jezelf toepasbaar te maken.

  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Ja voor de console is het ook geen probleem.
Maar dat stukje tekst stond er alleen als voorbeeld hoe mijn datagridview ongeveer is geworden.
Het gaat er dan dus ook om dat de waarden in de cellen van mijn datagridview als hexadecimaal worden weergegeven.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 11:21

TeeDee

CQB 241

Even uit mijn blote hoofdje:

C#:
1
sectionHeader[teller2].sh_type.ToString("X") 


En anders moet je even kijken welke argumenten de Byte.ToString() kan hebben.

[ Voor 30% gewijzigd door TeeDee op 04-12-2007 18:47 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

C#:
1
2
3
4
5
6
7
8
9
10
11
// ik denk zoiets:
string mijnString = sectionHeader[teller2].sh_type.ToString();
string melpString = String.Empty;
char[] charArray = mijnString.ToCharArray();

 for (int i = 0; i < charArray.Length; i++)
            {
                
                melpString += (byte)charArray[i];
            }
dataGridView1[2, teller2].Value = melpString;


Edit:
Beetje omslachtig zo te zien heh

[ Voor 5% gewijzigd door Verwijderd op 04-12-2007 18:49 ]


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Aah het werkt perfect met .ToString("X")!

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Het makkelijkste is om het Format property op de DataGridViewCellStyle te zetten.
Zo dus:
C#:
1
2
3
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();

col.CellTemplate.Style.Format = "X8";

Dan hoef je geen extra code te schrijven.

Edit
X8 werkt iets beter dan heb je tenminste voorloop-nullen :P

[ Voor 21% gewijzigd door MTWZZ op 04-12-2007 20:00 ]

Nu met Land Rover Series 3 en Defender 90


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Ja maar wat moet ik nu met het col object?
Wil je iets meer uitleg geven ik snap nu nog niet hoe ik dit aan mijn datagridview kan toevoegen.

--
Ik heb nu zoiets via de interface van Visual Studio gemaakt en daaraan te zien koppel je de columns op de volgende manier aan je datagridview:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
            this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.Column1,
            this.Column2,
            this.Column3,
            this.Column4,
            this.Column5,
            this.Column6,
            this.Column7,
            this.Column8,
            this.Column9,
            this.Column10,
            this.Column11});


Nu kan ik echter geen waarden meer toekennen zoals hier bovenin dit topic.
De debugger zegt dat de index te groot is.
Dat kan ik denk ik oplossen door mijn data aan de Row te koppelen middels de DataPropertyName.

Kan iemand mij in een paar regels code laten zien hoe dat moet?
Het is nu te laat om mij erin te verdiepen.

[ Voor 76% gewijzigd door Gehakt op 04-12-2007 23:16 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Sorry ik had inderdaad even iets duidelijker moeten zijn.

Ik neem aan (gevaarlijk :P) dat je de kolommen in de design-mode van je scherm hebt toegevoegd aan de DataGridView.
Afbeeldingslocatie: http://dev.barad-dur.nl/pub/datagridview.png
1) Selecteer de DataGridView
2) Klik op het pijltje rechtsbovenin (1)
3) Klik op "Edit columns" (2)
4) Klik op de knop bij "DefaultCellStyle" (3)
5) Voer het format in (X16 hexadecimaal met 16 posities) bij "Format" (4)

Het resultaat wordt dan zoiets:
Afbeeldingslocatie: http://dev.barad-dur.nl/pub/datagridview-screen.png

Klaar is kees. Ik hoop dat ie zo iets duidelijker is.

[ Voor 9% gewijzigd door MTWZZ op 04-12-2007 23:13 ]

Nu met Land Rover Series 3 en Defender 90


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
MTWZZ schreef op dinsdag 04 december 2007 @ 23:11:
Sorry ik had inderdaad even iets duidelijker moeten zijn.

Ik neem aan (gevaarlijk :P) dat je de kolommen in de design-mode van je scherm hebt toegevoegd aan de DataGridView.
[afbeelding]
1) Selecteer de DataGridView
2) Klik op het pijltje rechtsbovenin (1)
3) Klik op "Edit columns" (2)
4) Klik op de knop bij "DefaultCellStyle" (3)
5) Voer het format in (X16 hexadecimaal met 16 posities) bij "Format" (4)

Het resultaat wordt dan zoiets:
[afbeelding]

Klaar is kees. Ik hoop dat ie zo iets duidelijker is.
Zo, dat noem ik nou nog is een uitleg... _/-\o_

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • DrDelete
  • Registratie: Oktober 2000
  • Nu online
Verwijderd schreef op dinsdag 04 december 2007 @ 18:47:
C#:
1
2
3
4
5
6
7
8
9
10
11
// ik denk zoiets:
string mijnString = sectionHeader[teller2].sh_type.ToString();
string melpString = String.Empty;
char[] charArray = mijnString.ToCharArray();

 for (int i = 0; i < charArray.Length; i++)
            {
                
                melpString += (byte)charArray[i];
            }
dataGridView1[2, teller2].Value = melpString;


gebruik de StringBuilder class voor opbouw van een string in een iteratie-slag. Een string is immutable, dit betekent dat bij elke += actie de string volledig gekopieerd wordt.
Edit:
Beetje omslachtig zo te zien heh

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Gehakt schreef op dinsdag 04 december 2007 @ 22:55:
Nu kan ik echter geen waarden meer toekennen zoals hier bovenin dit topic.
De debugger zegt dat de index te groot is.
Dat kan ik denk ik oplossen door mijn data aan de Row te koppelen middels de DataPropertyName.

Kan iemand mij in een paar regels code laten zien hoe dat moet?
Het is nu te laat om mij erin te verdiepen.
U vraagt wij draaien.

Het belangrijkste om te weten is dat de DataGridView een property heeft "AutoGenerateColumns" wat default aan staat. Wat ik zelf altijd doe als ik handmatig kolommen ga toevoegen is in de constructor van het Form na de call naar InitializeComponent() dat property op false zetten. (kan overigens niet via de designer):
C#:
1
2
3
4
5
6
public frmMain() {
    InitializeComponent();

    // DataGridView zonder automagische kolommen
    dataGridView1.AutoGenerateColumns = false;
}


Wat je vervolgens doet is de kolommen definieeren via de designer (zie ook mijn post hierboven). In het schermpje met nummer 3 staat ook het property DataPropertyName. Dit property vul je met de naam van het property van het object waar je de data vandaan wilt halen. Snappez-vous? ;)

Ter verduidelijking:
Jouw object ElfHeader heeft een property sh_addr De DataGridViewColumn waarvan jij zegt "daar moet ie komen" zet je dus het DataProperty veld op sh_addr De DataGridView weet dan waar hij zijn info vandaan moet halen om die kolom te vullen.

Ik weet niet helemaal hoe jij de gegevens toevoegt aan de DataGridView (het lijkt er op dat je ze er direct inzet) maar het is misschien handig om een List<T> te gebruiken en deze als DataSource te gebruiken.
Voorbeeldje: (ik neem aan dat sectionHeader een array van ElfHeader is?)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
private void VulDataGridView()
{
    // Hier de code om sectionHeader op te bouwen en te vullen
    // ....
    // ....

    // Maak een List<T>
    List<ElfHeader> headers = new List<ElfHeader>(sectionHeader);

    // Koppel die list aan de DataGridView
    dataGridView1.DataSource = headers;
}

Nu met Land Rover Series 3 en Defender 90


Verwijderd

gebruik de StringBuilder class voor opbouw van een string in een iteratie-slag. Een string is immutable, dit betekent dat bij elke += actie de string volledig gekopieerd wordt.
Ja, klopt, hij maakt voor elke + een nieuwe string aan wat een beetje vervelend is bij veel iteraties, heb er voor de grap eens een testje over gedraaid met een timertje, en het scheelt een hoop. Maar probeerde even snel een voorbeeldje te schetsen :)
*wat sowieso een beetje nutteloos was aangezien ik ToString(IFormatProvider provider) nog niet tegen was gekomen.

[ Voor 11% gewijzigd door Verwijderd op 05-12-2007 08:43 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

@Worteltaart en DrDelete:
De oplossing die geschetst wordt werkt op zich wel maar in dit geval is het IMHO beter om de presentatie over te laten aan het component dat er "verstand" van heeft :P
En zoals Worteltaart al zegt ToString("X") werkt inderdaad als een tierelier.

Nu met Land Rover Series 3 en Defender 90

Pagina: 1