[c#] Wie bindet man eine Liste an dataGridView?


1 Answers

vielleicht etwas spät, aber nützlich für die Zukunft. Wenn Sie keine benutzerdefinierten Eigenschaften der Zelle festlegen müssen und nur Kopftext und Zellenwert betreffen, hilft Ihnen dieser Code

public class FileName
{        
     [DisplayName("File Name")] 
     public string FileName {get;set;}
     [DisplayName("Value")] 
     public string Value {get;set;}
}

und dann können Sie List als Datenquelle binden

private void BindGrid()
{
    var filelist = GetFileListOnWebServer().ToList();    
    gvFilesOnServer.DataSource = filelist.ToArray();
}

Für weitere Informationen können Sie diese Seite Bindungsliste von Klassenobjekten als Datenquelle zu DataGridView aufrufen

hoffe das wird dir helfen.

Question

Ich laufe im Kreis herum und mache das in den letzten Stunden.

Ich möchte eine Datagridview von einem Array von Zeichenfolgen auffüllen. Ich habe gelesen, dass es nicht direkt möglich ist, und dass ich einen benutzerdefinierten Typ erstellen muss, der die Zeichenfolge als eine öffentliche Eigenschaft enthält. Also habe ich einen Kurs gemacht:

public class FileName
    {
        private string _value;

        public FileName(string pValue)
        {
            _value = pValue;
        }

        public string Value
        {
            get 
            {
                return _value;
            }
            set { _value = value; }
        }
    }

Dies ist die Containerklasse, und sie hat einfach eine Eigenschaft mit dem Wert der Zeichenfolge. Alles, was ich jetzt möchte, ist diese Zeichenfolge, die in der Datagrid-Ansicht erscheint, wenn ich ihre Datenquelle an eine Liste anbinde.

Ich habe auch diese Methode, BindGrid (), mit der ich die Datagridview ausfüllen möchte. Hier ist es:

    private void BindGrid()
    {
        gvFilesOnServer.AutoGenerateColumns = false;

        //create the column programatically
        DataGridViewTextBoxColumn colFileName = new DataGridViewTextBoxColumn();
        DataGridViewCell cell = new DataGridViewTextBoxCell();
        colFileName.CellTemplate = cell; colFileName.Name = "Value";
        colFileName.HeaderText = "File Name";
        colFileName.ValueType = typeof(FileName);

        //add the column to the datagridview
        gvFilesOnServer.Columns.Add(colFileName);

        //fill the string array
        string[] filelist = GetFileListOnWebServer();

        //try making a List<FileName> from that array
        List<FileName> filenamesList = new List<FileName>(filelist.Length);
        for (int i = 0; i < filelist.Length; i++)
        {
            filenamesList.Add(new FileName(filelist[i].ToString()));
        }

        //try making a bindingsource
        BindingSource bs = new BindingSource();
        bs.DataSource = typeof(FileName);
        foreach (FileName fn in filenamesList)
        {
            bs.Add(fn);
        }
        gvFilesOnServer.DataSource = bs;
    }

Zum Schluss noch das Problem: Das String-Array füllt sich gut, die Liste ist ok, aber ich bekomme eine leere Spalte in der Datagridview. Ich habe auch versucht, Datenquelle = Liste <> direkt, anstatt = Bindingsource, immer noch nichts.

Ich würde wirklich einen Ratschlag schätzen, das hat mich verrückt gemacht.

Vielen Dank




Anstatt die neue Container-Klasse zu erstellen, können Sie eine dataTable verwenden.

DataTable dt = new DataTable();
dt.Columns.Add("My first column Name");

dt.Rows.Add(new object[] { "Item 1" });
dt.Rows.Add(new object[] { "Item number 2" });
dt.Rows.Add(new object[] { "Item number three" });

myDataGridView.DataSource = dt;

Mehr zu diesem Problem finden Sie hier: http://psworld.pl/Programming/BindingListOfString




Related