C # Преобразование всех строк сетки данных с привязкой к данным в класс данных - PullRequest
0 голосов
/ 06 июня 2019

У меня есть сетевое представление данных с привязкой к данным с классом Data

public class Data
{
    public int itemId { get; set; }
    public int minAmount { get; set; }
    public int maxAmount { get; set; }
    public decimal rate { get; set; }
    public string rarity { get; set; }
    public bool announce { get; set; }
}
Dictionary<string, Data[]> Dict = new Dictionary<string, Data[]>();

    private void button1_Click(object sender, EventArgs e)
    {
        string readText = File.ReadAllText(@"D:\Download\npc_drops.json");

        var result = JsonConvert.DeserializeObject<Dictionary<string, Data[]>>(readText);
        foreach (KeyValuePair<string, Data[]> entry in result)
        {

            Data[] dat = (Data[])entry.Value;
            string npc = entry.Key;
            listBox1.Items.Add(npc);
            Dict.Add(npc, dat);
        }
    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

        BindingSource bs = (BindingSource)this.dataGridView1.DataSource;
        this.dataGridView1.Rows.Clear();
        string curItem = listBox1.SelectedItem.ToString();

        Data[] data = Dict[curItem];
        foreach (Data item in data)
        {
            bs.Add(item);
        }
        this.dataGridView1.DataSource = bs;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        File.WriteAllText(@"D:\Download\npc_drops (1).json", string.Empty);
        var result = JsonConvert.SerializeObject(Dict);
        File.WriteAllText(@"D:\Download\npc_drops (1).json", result);
    }

    private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
    {
    }

    private void button3_Click(object sender, EventArgs e)
    {
        string curItem = listBox1.SelectedItem.ToString();
        // I'm trying to get all the rows of datagridView1 and change the Dict's data of the currently selected item to the data of datagridview1
    }

И в основном я пытаюсь получить строки из сеточного представления данных в массив Data aka Data []

Использование WinForms, Я не использую базу данных или что-то еще, я просто десериализирую данные json и добавляю их в представление данных

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Вы можете вообще отказаться от button3, изменив тип Dict на Dictionary<string, BindingList<Data>> и просто обновив dataGridView1.DataSource в listBox1_SelectedIndexChanged.

private Dictionary<string, BindingList<Data>> Dict = new Dictionary<string, BindingList<Data>>();
private void button1_Click(object sender, EventArgs e)
{
   string readText = File.ReadAllText(@"D:\Download\npc_drops.json");

   Dict = JsonConvert.DeserializeObject<Dictionary<string, BindingList<Data>>>(readText);
   foreach (var npc in Dict.Keys)
   {
      listBox1.Items.Add(npc);
   }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   string curItem = listBox1.SelectedItem.ToString();
   dataGridView1.DataSource = Dict[curItem];
}

//button2_Click remains unchanged.

//button3 is removed from the form.
0 голосов
/ 06 июня 2019
 var bindingSource = (BindingSource)dataGridView1.DataSource;
        BindingList<Data> list = new BindingList<Data>();
        list = (BindingList < Data >)bindingSource.List;



        Dict[curItem] = list.ToArray();

это решило мою проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...