Diskuze: BindingList - editování

C# .NET .NET (C# a Visual Basic) BindingList - editování American English version English version

Avatar
Lukáš Křehula
Redaktor
Avatar
Lukáš Křehula:

Čau,
potřeboval bych poradit s editováním binding listu.
Mám třídu "Spravce", ve kterém mám BindingList "casti" (třída)

public BindingList<Casti> casti;

Binduju to s comboBoxem a ve třídě "casti" nehledejte nic složitého, zatím tam mám jen název
Zatím vše funguje, dokud nezačnu editovat (tj. změnit název té části)
Vytvořil jsem si nový win form "EditovatCast", ten momentálně vypadá takto:

public partial class EditovatCast : Form
{
    private Spravce spravce;
    private Casti cast;

    public EditovatCast(Spravce spravce, Casti cast)
    {
        InitializeComponent();
        this.spravce = spravce;
        this.cast = cast;
        tool_textBoxNovyNazev.Text = cast.ToString();
    }

    private void tool_buttonEditovatCast_Click(object sender, EventArgs e)
    {
        if(tool_textBoxNovyNazev.Text != null)
        {
            spravce.editovatCast(cast, tool_textBoxNovyNazev.Text);
            this.Close();
        }
    }
}

Základní win form:

private void tool_buttonEditovatLokaci_Click(object sender, EventArgs e)
{
    if (tool_comboBoxSeznamLokaci.SelectedIndex != -1)
    {
        EditovatCast editovatCast = new EditovatCast(spravce, (Casti)tool_comboBoxSeznamLokaci.SelectedItem);
        editovatCast.ShowDialog();
    }
}

A samotné editování (ve třídě "spravce"):

public void editovatCast(Casti cast, string novyNazev)
{
    casti[casti.IndexOf(cast)].nazev = novyNazev;
}

Něco mám špatně, protože se to neupraví, nejspíš ten index v listu (casti.IndexOf(cas­t))

Už nevím co s tím, doufám že mi pomůžete :[

Díky za případnou pomoc.

 
Odpovědět 17.11.2014 13:53
Avatar
Odpovídá na Lukáš Křehula
sadlomaslox25:

No chyba je presne jak rikas "ve třídě casti nehledejte nic složitého". Predpokladam ze trida casti zapomela implementovat INotifyProper­tyChanged.

PS: Kod "casti[casti.In­dexOf(cast)].na­zev = novyNazev;" je nesmysl. Staci jen "cast.nazev=no­vyNazev".

Editováno 17.11.2014 14:24
 
Nahoru Odpovědět 17.11.2014 14:24
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na sadlomaslox25
Lukáš Křehula:

Když ta třída vypadá takto, jak mám implementovat INotifyProper­tyChanged?

public class Casti
{
    public string nazev { get; set; }

    public Casti(string nazev)
    {
        this.nazev = nazev;
    }

    public override string ToString()
    {
        return this.nazev;
    }
}
 
Nahoru Odpovědět 17.11.2014 14:52
Avatar
Odpovídá na Lukáš Křehula
sadlomaslox25:
public class Casti:INotifyPropertyChanged
    {
        private string _nazev;

        public string nazev
        {
            get { return _nazev; }
            set
            {
                if (value == _nazev) return;
                _nazev = value;
                OnPropertyChanged("nazev");
            }
        }

        public Casti(string nazev)
        {
            this.nazev = nazev;
        }

        public override string ToString()
        {
            return this.nazev;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 17.11.2014 15:10
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 4 zpráv z 4.