LostOblivion Skrevet 30. januar 2010 Del Skrevet 30. januar 2010 Hei, Har googlet og browset MSDN uten å forstå dette her overhodet. Er helt ny til databinding, men jeg skjønner at det er praktisk å kunne bruke i .NET. Nå til problemet: Jeg har laget en filserver og har da en liste med aktive tilkoblinger, List<Connection>. Jeg vil gjerne ha det slik at denne listen reflekteres i en ListView som finnes i gui-et. Hvordan gjør jeg dette? Hvordan velger jeg ut de forskjellige variablene av Connection-objektene i listen min og viser alle i ListView-en min? Forenklet eksempel med en Person-liste: Person.cs: namespace SmallProject { class Person { string m_name; int m_age; public Person(string name, int age) { m_name = name; m_age = age; } public string Name { get { return m_name; } set { m_name = value; } } public int Age { get { return m_age; } set { m_age = value; } } } } Form1.Designer.cs: namespace SmallProject { partial class SmallProjectForm { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.PersonList = new System.Windows.Forms.ListView(); this.PersonListName = new System.Windows.Forms.ColumnHeader(); this.PersonListAge = new System.Windows.Forms.ColumnHeader(); this.SuspendLayout(); // // PersonList // this.PersonList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.PersonListName, this.PersonListAge}); this.PersonList.Location = new System.Drawing.Point(12, 12); this.PersonList.Name = "PersonList"; this.PersonList.Size = new System.Drawing.Size(260, 133); this.PersonList.TabIndex = 0; this.PersonList.UseCompatibleStateImageBehavior = false; this.PersonList.View = System.Windows.Forms.View.Details; // // PersonListName // this.PersonListName.Text = "Name"; this.PersonListName.Width = 120; // // PersonListAge // this.PersonListAge.Text = "Age"; // // SmallProjectForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(284, 310); this.Controls.Add(this.PersonCountText); this.Controls.Add(this.PersonCountLabel); this.Controls.Add(this.PersonRemoveButton); this.Controls.Add(this.PersonAddButton); this.Controls.Add(this.PersonAgeText); this.Controls.Add(this.PersonNameText); this.Controls.Add(this.PersonAgeLabel); this.Controls.Add(this.PersonNameLabel); this.Controls.Add(this.PersonList); this.Name = "SmallProjectForm"; this.Text = "SmallProject"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ListView PersonList; private System.Windows.Forms.ColumnHeader PersonListName; private System.Windows.Forms.ColumnHeader PersonListAge; } } Program.cs: namespace SmallProject { static class Program { static List<Person> persons; public static List<Person> Persons { get { return persons; } } /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { persons = new List<Person>(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SmallProjectForm()); } } } Form1.cs: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SmallProject { public partial class SmallProjectForm : Form { public SmallProjectForm() { InitializeComponent(); } private void SomeAddPersonEvent(object sender, EventArgs e) { string name = "Jan-Ove"; int age = 26; Program.Persons.Add(new Person(name, age)); // Should be added to the PersonList now. } private void SomeRemovePersonEvent(object sender, EventArgs e) { if (Program.Persons.Count > 0) Program.Persons.RemoveAt(0); // Should be removed from the PersonList now. } } } Hadde vært knall om noen hadde link til en god side hvor data binding blir forklart for lister og ListView. Evt. forklare meg kjapt hvordan i denne koden. Lenke til kommentar
GeirGrusom Skrevet 1. februar 2010 Del Skrevet 1. februar 2010 et utgangspunkt i det minste: http://msdn.microsoft.com/en-us/library/ms132679.aspx Lenke til kommentar
LostOblivion Skrevet 2. februar 2010 Forfatter Del Skrevet 2. februar 2010 Takk. Jeg fikk det ikke til å funke med ListView fordi ListView ikke hadde noen DataSource, så jeg brukte en litt mer vanlig måte med at to funksjoner la til og fjernet ListViewItems fra ListView-en min, og en gui timer som oppdaterte listen. Lenke til kommentar
HDSoftware Skrevet 2. februar 2010 Del Skrevet 2. februar 2010 er det noen grunn til at du ikke vil bruke DataGridView? Som faktisk haar en DataSource Lenke til kommentar
LostOblivion Skrevet 3. februar 2010 Forfatter Del Skrevet 3. februar 2010 (endret) Den ser rar ut. Vil ha looken til f eks "Details"-visning i Windows Explorer. Eller uTorrent sin torrentliste. Endret 3. februar 2010 av LostOblivion Lenke til kommentar
HDSoftware Skrevet 3. februar 2010 Del Skrevet 3. februar 2010 Ser den rar ut? Den er da 100% modifiserbar og kan med enkle håndgrep likne hva som helst. Lenke til kommentar
GeirGrusom Skrevet 3. februar 2010 Del Skrevet 3. februar 2010 HDSoftware har helt rett. Det er ingen DataSource egenskap på ListView, så den har ikke muligheten til dette på samme måte som DataGrid. DataGrid er enkel å bruke, så det burde ikke være noe problem ^^ Lenke til kommentar
LostOblivion Skrevet 5. februar 2010 Forfatter Del Skrevet 5. februar 2010 Oja, kjempekult om jeg får til å bruke DataGridView, men kode for å la det se ut windows explorers details view/uTorrents liste med torrents? Lenke til kommentar
HDSoftware Skrevet 8. februar 2010 Del Skrevet 8. februar 2010 Alle propertiene til DataGridView er tilgjengelig i "Properties" på kontrollen. Bare å prøve seg frem. Alt er der.... Jeg aner ikek hvordan den kontrollen du prøver å etterligne ser ut så jeg har ikek noe clue på hvilke properties do må endre. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå