#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’, чтобы гарантировать, что записи вернутся в том порядке, в котором вы их ожидаете, однако этот код все равно будет сложно поддерживать, поскольку его уже трудно читать / понимать.