mono-project.de Community
 
Zurück   mono-project.de Community > Mono für Entwickler > Code Snippets und User Projekte

Code Snippets und User Projekte Hier können eigene Codefragmente, Projekte sowie Design- und Entwurfsmuster dieser diskutiert werden.

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 10.11.2008, 23:03:54
paranoid64 paranoid64 ist offline
Junior Member
 
Registriert seit: 31.10.2008
Beiträge: 10
Renommee-Modifikator: 0
paranoid64 is on a distinguished road
Standard ID für XML

Hi,

ich habe eine xml in ein DataGridView geladen und die erste spalte soll als ID Feld dienen.

über ds.Tables[0].Columns[0].DefaultValue versuch ich ihn die aktuelle Zeile zu übergeben.
Aber irgendwie funktioniert da nichts, hat jemand eine idee ?
Mit Zitat antworten
  #2  
Alt 12.11.2008, 11:12:04
Benutzerbild von Daniel
Daniel Daniel ist offline
Senior Member
 
Registriert seit: 05.07.2004
Ort: Berlin/Kiel
Beiträge: 746
Renommee-Modifikator: 10
Daniel is on a distinguished road
Standard AW: ID für XML

Ohne deinen entsprechenden Code kann dir so keiner helfen.
__________________
Mit Zitat antworten
  #3  
Alt 12.11.2008, 14:04:12
paranoid64 paranoid64 ist offline
Junior Member
 
Registriert seit: 31.10.2008
Beiträge: 10
Renommee-Modifikator: 0
paranoid64 is on a distinguished road
Smile AW: ID für XML

Hab es schon gelöst.
Es ging darum, ein XML ohne schema oder den klassischen XML-DTD schema ein ID feld zu geben.
Wer die lösung gebrauchen:

XML - Beispiel:

Code:
<?xml version="1.0" standalone="yes"?>
<Client>
  <allow>
    <id>1</id>
    <ip>127.0.0.1</ip>
  </allow>
  <allow>
    <id>2</id>
    <ip>xx.xxx.xxx.xxx</ip>
  </allow>
</Client>
Code:
                    // XML lesen und ans DataGridView1 übergeben
                    DataSet ds = new DataSet();                       
                    ds.ReadXml("pfad/deine.xml",XmlReadMode.InferSchema);

                    // Hier alle Zeilen zählen
                    int totalRecords = ds.Tables[0].Rows.Count;

                    this.dataGridView1.DataSource = ds;
                    //xml node child "allow" von der Beispiel XML
                    this.dataGridView1.DataMember = "allow";

                    // ID aufsteigen sortieren
                    this.dataGridView1.Sort (this.dataGridView1.Columns[0], ListSortDirection.Ascending);

                     //ID neu anlegen um doppelten ID eintrag zu verhindern
                     for (int i=0;i<= totalRecords ;i++)
                    {
                        this.dataGridView1.Rows[i].Cells[0].Value = i;
                        log_msg += "Update client:> ID " +  i + " successful\n";
                    }

                    // Colomns[0] ist das ID-Feld.
                    // Neuer datensatz bekommt bekommt Zeilen nummer als ID
                    ds.Tables[0].Columns[0].DefaultValue = totalRecords++;

                    //ID nur kann nur gelesen werden
                    this.dataGridView1.Columns[0].ReadOnly = true;

                    //Breite für ID-Feld zuweisen
                    this.dataGridView1.Columns[0].Width = 25;
                    
                    //Nächste Spalte breite zuweisen
                    this.dataGridView1.Columns[1].Width = 90;

                    //Die ID darf nur einmal vorkommen
                    ds.Tables[0].Columns[0].Unique = true;
                    
                    this.dataGridView1.Update();
Nun noch ein Click event für DataGridView1.
ID werden neu vergeben.

Code:
void DataGridView1CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if(e.RowIndex > -1)
             {
                for (int i=0;i<= e.RowIndex;i++)
                {
                    this.dataGridView1.Rows[i].Cells[0].Value = i;
                }
                this.dataGridView1.Update();
            }
        }
XML Speichern ohne Schema:
Ihr braucht ein Button (BtnWriteXmlClick)

Zitat:
void BtnWriteXmlClick(object sender, EventArgs e)
{
DataSet ds = (DataSet) dataGridView1.DataSource;
ds.WriteXml(filename_users,XmlWriteMode.IgnoreSche ma);
MessageBox.Show ( "XML save." );
}
vieleicht hat ja jemand ein bessern vorschalg.

Geändert von paranoid64 (12.11.2008 um 19:07:14 Uhr)
Mit Zitat antworten
  #4  
Alt 15.11.2008, 12:57:47
paranoid64 paranoid64 ist offline
Junior Member
 
Registriert seit: 31.10.2008
Beiträge: 10
Renommee-Modifikator: 0
paranoid64 is on a distinguished road
Standard AW: ID für XML

Wenn man die ID ab- / aufsteigend sortiert hat, werden die ID falsch angelegt.

Deshalb eine besser lösung:
Code:
void DataGridView1CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if(e.RowIndex > -1)
             {
                for (int i=0;i<= e.RowIndex;i++)
                {
                    this.dataGridView1.Rows[i].Cells[0].Value = i;
                }
                this.dataGridView1.Update();
            }
        }
ersetzen mit:

Code:
private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {
            if( e.Row.Index > -1)
             {
                DataSet ds = (DataSet) dataGridView1.DataSource;
                this.NewRowID = ds.Tables[0].Rows.Count;
                this.OldRowID = 0;
                    for (int i=0;i<=this.NewRowID;i++)
                    {
                            if (this.dataGridView1.Rows[i].Cells[0].Value.ToString() == this.OldRowID.ToString())
                            {
                                  this.OldRowID = i;
                                  this.OldRowID = this.OldRowID +1;
                                  i = 0;
                                if (this.dataGridView1.Rows[0].Cells[0].Value.ToString() == this.OldRowID.ToString())
                                {
                                      this.OldRowID = i;
                                      this.OldRowID = this.OldRowID +1;
                                      i = 0;
                                }
                                ds.Tables[0].Columns[0].DefaultValue = this.OldRowID;
                            }
                            else
                            {
                                ds.Tables[0].Columns[0].DefaultValue = this.OldRowID;    
                            }
                    }
                    this.dataGridView1.Update();
                    this.dataGridView1.Refresh();
            }
        }
und

Code:
//ID neu anlegen um doppelten ID eintrag zu verhindern
                     for (int i=0;i<= totalRecords ;i++)
                    {
                        this.dataGridView1.Rows[i].Cells[0].Value = i;
                        log_msg += "Update client:> ID " +  i + " successful\n";
                    }
mit
Code:
                for (int i=0;i<=this.NewRowID;i++)
                {
                    if (i < NewRowID )
                    {
                        if (this.dataGridView1.Rows[i].Cells[0].Value.ToString() == this.OldRowID.ToString())
                        {
                              this.OldRowID = i;
                              this.OldRowID = this.OldRowID +1;
                              i = 0;
                            if (this.dataGridView1.Rows[0].Cells[0].Value.ToString() == this.OldRowID.ToString())
                            {
                                  this.OldRowID = i;
                                  this.OldRowID = this.OldRowID +1;
                                  i = 0;
                            }
                            ds.Tables[0].Columns[0].DefaultValue = this.OldRowID;
                        }
                        else
                        {
                            MessageBox.Show ( this.OldRowID.ToString() );
                            ds.Tables[0].Columns[0].DefaultValue = this.OldRowID;    
                        }
                    }
                }
ersetzen.

Geändert von paranoid64 (15.11.2008 um 14:16:38 Uhr)
Mit Zitat antworten
  #5  
Alt 26.12.2009, 08:25:30
wuzelor wuzelor ist offline
Junior Member
 
Registriert seit: 26.12.2009
Beiträge: 1
Renommee-Modifikator: 0
wuzelor is on a distinguished road
Standard AW: ID für XML

Interessant, besser hätte ich es auch nicht hinbekommen
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04:42 Uhr.

Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.