Diskuze: ListBox
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
MultiColumn u ListBoxu slouží pouze k tomu, že se při vertikálním
zaplnění, data zobrazují v novém sloupci.
Použij ListView s nastavením View =
Details
poradis prosim jeste jak udelat....
mam tabulku klientu...kazdy zaznam ma svoje id a pak udaje,...jmeno, prijmeni..a
dalsi udaje.
Jmeno a prijmeni chci zobrazit v list view a kdyz bude uzivatel klikat na data v
listview tak aby se dalsi udaje ukazovali v textboxech. Takze kde v tom listview
najdu to id...kdyz ho tam vlastne nezobrazuju. Pokud se ptam blbe tak pardon
tady máš velmi jednoduše řešenou ukázku, seznamu lidí v listu a zobrazovaný v ListView včetně editace položek
public partial class Form1 : Form
{
List<Person> persons = new List<Person>();
public Form1()
{
InitializeComponent();
listView1.View = View.Details;
listView1.VirtualMode = true; // virtuální režim
listView1.FullRowSelect = true;
//názvy sloupců
listView1.Columns.Add("Jméno");
listView1.Columns.Add("Příjmení");
//vytvoření lidí
persons.Add(new Person(2001, "Karel", "Novák"));
persons.Add(new Person(2002, "Josef", "Sláma"));
persons.Add(new Person(2003, "Hana", "Slámová"));
//nastavíme mu velikost
listView1.VirtualListSize = persons.Count;
}
/// <summary>
/// vypisujeme položku
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listView1_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = persons[e.ItemIndex].name;
lvi.SubItems.Add(persons[e.ItemIndex].surname);
e.Item = lvi;
}
/// <summary>
/// načtení označené položky do textboxů
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
//pokud je nejaká položka označena..
if(listView1.SelectedIndices.Count > 0)
{
//načteme hodnoty do textboxů
textBoxName.Text = persons[listView1.SelectedIndices[0]].name;
textBoxSurname.Text = persons[listView1.SelectedIndices[0]].surname;
}
else
{
textBoxName.Clear();
textBoxSurname.Clear();
}
}
/// <summary>
/// změna položky
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonModify_Click(object sender, EventArgs e)
{
if (listView1.SelectedIndices.Count > 0)
{
persons[listView1.SelectedIndices[0]].name = textBoxName.Text;
persons[listView1.SelectedIndices[0]].surname = textBoxSurname.Text;
listView1.Refresh();
}
else MessageBox.Show("Není zvolena položka pro editaci!");
}
}
public class Person
{
public int id;
public string name;
public string surname;
public Person(int id, string name, string surname)
{
this.id = id;
this.name = name;
this.surname = surname;
}
}
jak vidíš, můžeš si vybrat co s třídy Person zobrazíš v listu.
Mám to takhle... je databaze klientu, kde je id, jmeno, prijmeni, telefon, email.. a dalsi udaje. v ListView ukazu jen seznam...prijmeni a jmeno. Jak pak zobrazit v textboxech ty i ty ostatni udaje
public partial class Form1 : Form
{
SqlConnection conn = new SqlConnection("Data
Source=DESKTOP-DH9TGH2\\SQLEXPRESS;Initial Catalog=DataLife;Integrated
Security=True");
public Form1()
{
InitializeComponent();
lvClienti.View = View.Details;
lvClienti.Columns.Add("Příjmení");
lvClienti.Columns.Add("Jméno");
lvClienti.FullRowSelect = true;
}
private void Form1_Load(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("Select * from client order by lastname asc",
conn);
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("Select id,lastName, firstName from
client order by lastName asc",conn );
DataTable dt = new DataTable();
sda.Fill(dt);
SqlDataReader drr = cmd.ExecuteReader();
if (drr.HasRows)
{
while (drr.Read())
{
ListViewItem item = new ListViewItem(drr["lastName"].ToString());
item.SubItems.Add(drr["firstName"].ToString());
lvClienti.Items.Add(item);
}
}
}
private void lvClienti_MouseClick(object sender, MouseEventArgs e)
{
}
private void lvClienti_SelectedIndexChanged(object sender, EventArgs
e)
{
//pokud je nejaká položka označena..
if (lvClienti.SelectedIndices.Count > 0)
{
}
else
{
txtJmeno.Clear();
txtPrijmeni.Clear();
}
}
}
}
Pro vkládání kódu slouží tlačítko </>
Právě pro to, jsem tu dal ukázku s ListView, který pracuje virtuálně. Takže všechna data můžeš načíst do nějaké kolekce a do ListView pak vykreslovat z kolekce to, co uznáš za vhodné.
Nebo se podívej ještě na DataGridView, ten se při přístupu k databázím používá spíš, než ListView.
Zobrazeno 8 zpráv z 8.