Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

datagridview uljepšavanje

[es] :: .NET :: datagridview uljepšavanje

[ Pregleda: 1477 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Black One
Čepin

Član broj: 46302
Poruke: 102
*.adsl.net.t-com.hr.

Sajt: www.medija.org


+1 Profil

icon datagridview uljepšavanje15.03.2010. u 10:36 - pre 171 meseci
Pozdrav.

Napravio sam jedan program za svoju wireless mrežu, koji pinga mrežu tj. korisnike i točke svaku "1min" i pravi statistike dali je točka online, offline, kojiko je dugo radila, kad je zadnji put pingana itd.. tu možete vidjeti sliku kako izgleda.



mene zanima sad kako da napravim da kad se refresha lista tj znači kad se obavi ping kad unosi nove podatke u bazu i očitava ih u dgv. da mi se nerefreshira kompletna dgv. nego da mi se refreshiraju samo točke u njoj. ne znam dali me razumijete dosta mi je teško objasnit, jer svaki put kad mi se refreshira dgv on mi makne npr selection s reda na kojem je bio jer popuni dgv s novim podacima.

2. na slici vidite da piše dali je točka online il offline. kako da napravim da mi oboja drugim bojama ako je online il ofline. ili još bolje da stavim sliku npr crvenu točku ako je off ili zelenu ako je online.

3. htjeo bi napravit postotak koliko je % točka radila imam u minutama koliko je radila i koliko nije radila i u php-u fino napravim statistiku možete vidjeti ovdje..
http://www.wirelesscepin.com/ping/

al ja bi htjeo da napravim isto tak neki klizač na kojem bi pisalo da je 90% online npr i da je grafički to prikazano. isto tako kako da te minute koliko je točka online prikažem u sljedečem obliku umjesto 32424min da piše: 1d 5h 27min

trenutni kod za uljepšavanje dgv je:
Code:
 Private Sub DataGridViewFormat(ByRef dgvTocke As DataGridView)
        With dgvTocke
            .AlternatingRowsDefaultCellStyle.BackColor = Color.LightCyan
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .AllowUserToOrderColumns = True
            .AllowUserToDeleteRows = False
            .AllowUserToAddRows = False
            .ReadOnly = True
            .MultiSelect = False
            .Columns.Clear()
            .AutoResizeColumns()
            .AutoResizeRows()

            Dim ID As New DataGridViewTextBoxColumn
            With ID
                .DataPropertyName = "id"
                .Name = "id"
                .HeaderText = "ID"
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
            End With
            .Columns.Add(ID)
            ID.Visible = False


            Dim naziv As New DataGridViewTextBoxColumn
            With naziv
                .DataPropertyName = "naziv"
                .Name = "naziv"
                .HeaderText = "Naziv Točke"
                .MinimumWidth = 220
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
            End With
            .Columns.Add(naziv)


            Dim ip As New DataGridViewTextBoxColumn
            With ip
                .DataPropertyName = "ip"
                .Name = "ip"
                .HeaderText = "IP Adresa"
                .MinimumWidth = 120
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
            End With
            .Columns.Add(ip)


            Dim status As New DataGridViewTextBoxColumn
            With status
                .DataPropertyName = "status"
                .Name = "status"
                .HeaderText = "Status Točke"
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            End With
            .Columns.Add(status)



            Dim up As New DataGridViewTextBoxColumn
            With up
                .DataPropertyName = "Online"
                .Name = "Online"
                .HeaderText = "UpTime Točke"
                .MinimumWidth = 120
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
            .Columns.Add(up)

            Dim down As New DataGridViewTextBoxColumn
            With down
                .DataPropertyName = "Offline"
                .Name = "Offline"
                .HeaderText = "DownTime Točke"
                .MinimumWidth = 120
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
            .Columns.Add(down)

            Dim last_up As New DataGridViewTextBoxColumn
            With last_up
                .DataPropertyName = "DateTime"
                .Name = "last_up"
                .HeaderText = "Zadnji put uspješno pingana"
                .MinimumWidth = 150
                .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
            End With
            .Columns.Add(last_up)

        End With
    End Sub

Prikačeni fajlovi
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: datagridview uljepšavanje16.03.2010. u 21:20 - pre 171 meseci
Pozdrav,
Dobra pitanja...
Evo da probam da pomognem.

1. da bi zadrzao selekciju, ne postoji neki property ili tako nesto, bar ja ne znam. mozes da zapamtis Id od podatka, da uradis refresh podataka i onda opet selektujes podatak
Code:

private void RefreshFromDb()
{
  var id = ((MojaKlasa)dgvTocke.CurrentRow.DataBoundItem).Id;
  dgvTocke.DataSource = MojaKlasaPersistence.GetData();
  for (int i=0; i<dgvTocke.Rows.Count; i++)
  {
    if(((MojaKlasa)dgvTocke.Rows[i].DataBoundItem).Id == id)
    {
       dgvTocke.CurrentCell = dgvTocke.Rows[i].Cells[0];
       break;
    }  
  }
}


Moze i bolje, ali ne znam koristis li binding source itd...

2. obradis event grid koji se zove CellFormatting. U njemu kazes nesto tipa
Code:

if(dgvTocke.Columns[e.ColumnIndex] == status &&
  ((MojaKlasa)dgvTocke.Rows[e.RowIndex].DataBoundItem).status == "Online")
  e.CellStyle.ForeColor = Color.Green


3. mozes iskoristiti CellPainting eventa da graficki prikazes procenat
Code:

if(dgvTocke.Columns[e.ColumnIndex] == procenatColumn)
{
  var rect = e.CellBounds;
  double procenat =  ((MojaKlasa)dgvTocke.Rows[e.RowIndex].DataBoundItem).procenat;
  rect.Width = (int)(rect.Width * procenat);
  e.Graphics.FillRectangle(Brushes.Green, rect);
}


'MojaKlasa' je neka tvoja klasa kojom predstavljas podatke
 
Odgovor na temu

Black One
Čepin

Član broj: 46302
Poruke: 102
*.adsl.net.t-com.hr.

Sajt: www.medija.org


+1 Profil

icon Re: datagridview uljepšavanje17.03.2010. u 10:07 - pre 171 meseci
Hvala na odgovoru!
i ja sam isto mislio da prije refrešanja zapamtim negde id selektiranog reda i kada se osvježi da odabere taj red opet

pokušao sam s tvojim kodovima al mi javlja greške ja radim u vb.net 2008 profesional
al pokušat ću se još malo igrat snjima da vidim zašto javlja grešku.

hvala puno ;)

ovako vadim podatke i šaljem ih u dgvClanovi

Code:
   Private Sub cmdClanovi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClanovi.Click
        Dim conn As New MySqlConnection
        Dim myCommand As New MySqlCommand
        Dim myAdapter As New MySqlDataAdapter
        Dim myData As New DataTable
        Dim SQL As String


        SQL = "SELECT id as id, ime AS Naziv, ip AS IP, status AS Status, up AS Online, down AS Offline, chat As chat, last_up AS DateTime FROM clanovi "

        conn.ConnectionString = myConnString

        Try
            conn.Open()
            Try
                myCommand.Connection = conn
                myCommand.CommandText = SQL

                myAdapter.SelectCommand = myCommand
                myAdapter.Fill(myData)

                dgvClanovi.DataSource = myData
                dgvClanovi.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells

                Call DataGridViewFormat1(dgvClanovi)

                With dgvClanovi
                    .AutoResizeRows()
                End With

            Catch myerror As MySqlException
                MsgBox("There was an error reading from the database: " & myerror.Message)
            End Try




        Catch myerror As MySqlException
            MessageBox.Show("Error connecting to the database: " & myerror.Message)
        Finally
            If conn.State <> ConnectionState.Closed Then conn.Close()
        End Try
    End Sub
 
Odgovor na temu

Black One
Čepin

Član broj: 46302
Poruke: 102
*.adsl.net.t-com.hr.

Sajt: www.medija.org


+1 Profil

icon Re: datagridview uljepšavanje19.03.2010. u 15:52 - pre 171 meseci
uspio sam riješit bojanje online ili ofline s ovim kodom jako puno mi je pomogao tvoj kod ;)

ali nikako nisam uspio riješit bojanje tj pravljenje postotka i preračunavanje iz minute formata u dan, sat i minute evo moji kodovi,

Code:

 '// online offline
        If Me.dgvTocke.Columns(e.ColumnIndex).Name = "status" Then
            If e.Value IsNot Nothing Then

                ' Check for the string "pink" in the cell.
                Dim stringValue As String = CType(e.Value, String)
                stringValue = stringValue.ToLower()
                If stringValue = "online" Then
                    e.CellStyle.ForeColor = Color.Green
                Else
                    e.CellStyle.ForeColor = Color.Red
                End If
            End If
        End If
        '// Postotak
        If Me.dgvTocke.Columns(e.ColumnIndex).Name = "online" Then
            If e.Value IsNot Nothing Then
                e.Value = ukupnoVremena(e.Value)

            End If
        End If



    End Sub
    Function ukupnoVremena(ByVal vrijeme As Double)
        Dim minute, sati, dana As Double
        minute = vrijeme / 60
        vrijeme = vrijeme / 60
        sati = vrijeme / 24
        dana = vrijeme / 24
        Return "$dana dana, $sati sati/a i $minute minute/a"
    End Function



sa postotkom mi neprepoznaje kod

e.CellBounds
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: datagridview uljepšavanje20.03.2010. u 14:29 - pre 171 meseci
fali ti e.FormattingApplied = true nakon linije e.Value = ukupnoVremena(e.Value)
jer bez toga nece znati da si menjao vrednost, a i nesto mi je ta formula sto koristis sumnjiva

imas klasu timespan, pa probaj da je instanciras brojem minuta i onda prozoves njen tostring metod
to ti je najlakse i najcitljivije

nisam shvatio sta je problem sa procentom. koji kod ti ne prepoznaje, mozes li da copy/paste?

Pozdav,
 
Odgovor na temu

[es] :: .NET :: datagridview uljepšavanje

[ Pregleda: 1477 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.