Как сгенерировать 3-узловой treeview в winforms с mysql?

#c# #winforms #treeview

#c# #winforms #treeview

Вопрос:

База данных

Я реализую базу данных, поэтому я закодировал like…

    string MyConString = ConfigurationManager.ConnectionStrings["College_Management_System.Properties.Settings.cmsConnectionString"].ConnectionString;
            MySqlConnection connection = new MySqlConnection(MyConString);
            MySqlCommand command = connection.CreateCommand();
            MySqlDataReader Reader;
            command.CommandText = "select * from menu_right";
            connection.Open();
            Reader = command.ExecuteReader();
            while (Reader.Read())
            {
                if (Reader[2].ToString() == Convert.ToString(0))
                {
                    treeView1.Nodes.Add(Reader[3].ToString(), Reader[1].ToString());
                }

                if (Reader[2].ToString() == Convert.ToString(1))
                {
                    treeView1.Nodes[0].Nodes.Add(Reader[3].ToString(), Reader[1].ToString());
                }

                if (Reader[2].ToString() == Convert.ToString(4))
                {
                    treeView1.Nodes[1].Nodes.Add(Reader[3].ToString(), Reader[1].ToString());
                }

                if (Reader[2].ToString() == Convert.ToString(18))
                {
                    treeView1.Nodes[1].Nodes[0].Nodes.Add(Reader[3].ToString(), Reader[1].ToString());
                }
            }
            connection.Close();
  

но это выдает ошибку,

Указанный аргумент находился вне диапазона допустимых значений. Имя параметра: индекс

в,

 treeView1.Nodes[1].Nodes[0].Nodes.Add(Reader[3].ToString(), Reader[1].ToString());
  

в чем проблема в моем коде.?.

Есть ли какой-либо другой способ упростить код для моего требования?

Ответ №1:

Ваша ошибка связана с тем фактом, что записи с parent_id == 18 считываются перед записью с parent_id == 4. Ваша treeView1.Nodes[1].Node[0] еще не была добавлена на момент ее вызова.

Возможно, вы могли бы избежать этой ситуации с помощью чего-то вроде ‘order by parent_id’, чтобы гарантировать, что записи вернутся в том порядке, в котором вы их ожидаете, однако этот код все равно будет сложно поддерживать, поскольку его уже трудно читать / понимать.