Avatar
moravec.mara
Člen
Avatar
moravec.mara:

Dobrý den,
řeším problém jak naplnit multicolumn listbox, abych na nej mohl navazat txtBoxy.
V listboxu by se melo zobrazovat jmeno a prijmeni, ale ne id..indexove pole

 
Odpovědět 1. prosince 0:47
Avatar
HONZ4
Člen
Avatar
Odpovídá na moravec.mara
HONZ4:

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

 
Nahoru Odpovědět  +2 1. prosince 8:01
Avatar
moravec.mara
Člen
Avatar
Odpovídá na HONZ4
moravec.mara:

ok, díky..kouknu na to

 
Nahoru Odpovědět 1. prosince 21:32
Avatar
moravec.mara
Člen
Avatar
Odpovídá na HONZ4
moravec.mara:

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 :)

 
Nahoru Odpovědět 1. prosince 21:43
Avatar
HONZ4
Člen
Avatar
HONZ4:

co je tabulka klientů?

 
Nahoru Odpovědět 1. prosince 21:52
Avatar
HONZ4
Člen
Avatar
HONZ4:

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.

 
Nahoru Odpovědět 1. prosince 22:24
Avatar
moravec.mara
Člen
Avatar
Odpovídá na HONZ4
moravec.mara:

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\\SQLEX­PRESS;Initial Catalog=DataLi­fe;Integrated Security=True");

public Form1()
{
InitializeCom­ponent();
lvClienti.View = View.Details;
lvClienti.Colum­ns.Add("Příjme­ní");
lvClienti.Colum­ns.Add("Jméno");
lvClienti.FullRow­Select = 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("Se­lect id,lastName, firstName from client order by lastName asc",conn );
DataTable dt = new DataTable();
sda.Fill(dt);

SqlDataReader drr = cmd.ExecuteRe­ader();
if (drr.HasRows)
{
while (drr.Read())
{
ListViewItem item = new ListViewItem(drr["las­tName"].ToStrin­g());
item.SubItems­.Add(drr["fir­stName"].ToStrin­g());

lvClienti.Item­s.Add(item);
}
}

}

private void lvClienti_Mou­seClick(object sender, MouseEventArgs e)
{

}

private void lvClienti_Selec­tedIndexChanged(ob­ject sender, EventArgs e)
{
//pokud je nejaká položka označena..
if (lvClienti.Se­lectedIndices­.Count > 0)
{

}
else
{
txtJmeno.Clear();
txtPrijmeni.Cle­ar();
}
}

}
}

 
Nahoru Odpovědět 2. prosince 9:02
Avatar
HONZ4
Člen
Avatar
Odpovídá na moravec.mara
HONZ4:

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.

 
Nahoru Odpovědět 2. prosince 13:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.