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


Answers

mag spät sein, aber nützlich für die Zukunft. Wenn Sie keine benutzerdefinierten Eigenschaften der Zelle festlegen müssen und sich nur auf den Kopfzeilentext und den Zellenwert beziehen, 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 als

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

Weitere Informationen finden Sie auf dieser Seite. Liste der Klassenobjekte als Datenquelle an DataGridView binden

Ich hoffe, das wird dir helfen.

Question

Ich scheine in den letzten Stunden im Kreis herumzulaufen.

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

public class FileName
    {
        private string _value;

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

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

Das ist die Container-Klasse, und es hat einfach eine Eigenschaft mit dem Wert der Zeichenfolge. Alles, was ich jetzt will, ist diese Zeichenkette, die in der Datagridansicht erscheint, wenn ich ihre Datenquelle an eine Liste binde.

Außerdem habe ich diese Methode, BindGrid (), mit der ich die Datagridansicht fü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 das Problem: Das String-Array füllt sich ok, die Liste wird ok erstellt, aber ich bekomme eine leere Spalte in der Datagridansicht. Ich versuchte auch datasource = list <> direkt, anstelle von = bindingsource, immer noch nichts.

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

Vielen Dank




Anstatt die neue Container-Klasse zu erstellen, können Sie eine Datentabelle 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