C # Заполнение дерева из результатов базы данных - PullRequest
1 голос
/ 14 июля 2011

Я изучаю язык программирования C # и создаю надстройку для приложения для расчета заработной платы для SAP business One. Я никогда раньше не использовал древовидную структуру и хотел узнать, как можно заполнять элементы дерева из базы данных. Я использую Visual Studio 2010 и Microsoft SQL Server 2008.

У меня один родитель с 2 детьми, т.е.

- Component                        ....Parent
      Earnings                     ....child
      Deductions                   ....child

Я хочу, чтобы дочерний элемент Earnings отображал все результаты из поля U_PD_description, где U_PD_type = "Earnings", т.е.

- Component                        ....Parent
          Earnings                     ....child
              Housing Allowance
              Mobile Phone Allowance
              Mileage Allowance
          Deductions                   ....child

и аналогично для отчислений. У меня есть следующий код для загрузки формы:

 private void frm_earn_deduct_setup_Load(object sender, EventArgs e)
        {
            // Get service instance
            var earnDeductMasterService = Program.Kernel.Get<IEarnDeductMasterService>();

            //Query database for all records that have earnings
            var earnings = from ed in earnDeductMasterService.GetAllEarnDeductMasters()
                           where ed.U_PD_type.Trim().Equals("Earnings".Trim(), StringComparison.CurrentCultureIgnoreCase)
                           select ed;

            if (earnings.Any(x => x != null))
            {
                //To populate subtree Earnings with U_PD_description results
                //.....some code here
            }
            else 
            {
                //Nothing to populate            
            }

            //.............................................................................
            //Query database for all records that have deductions
            var deductions = from ed in earnDeductMasterService.GetAllEarnDeductMasters()
                             where ed.U_PD_type.Trim().Equals("Deductions".Trim(), StringComparison.CurrentCultureIgnoreCase)
                             select ed;

            if (deductions.Any(x => x != null))
            {
                //To populate subtree Deductions with U_PD_description results
                //.....some code here
            }
            else
            {
                //Nothing to populate            
            }

            // Disable default items
            txt_amt_greater_than.Enabled = false; 
            bindingNavigatorDeleteItem.Enabled = false;

            // Call service instance
            earnDeductMasterBindingSource.DataSource = Program.Kernel.Get<IEarnDeductMasterService>().GetAllEarnDeductMasters().ToList();
        }

Может кто-нибудь показать мне пример того, как заполнить, скажем, поддерево доходов в treeView1?

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Если я правильно понял, что вы хотите, то вот пример, как заполнить древовидную структуру:

List<string> earnings = new List<string>() { "Housing Allowance", "Mobile Phone Allowance", "Mileage Allowance" };
List<string> deductions = new List<string>() { "Housing Ban", "Mobile Phone Ban", "Mileage Ban" };

treeView1.Nodes.Add("Component");//adding root node
treeView1.Nodes[0].Nodes.Add("Earnings");//adding earnings child node
treeView1.Nodes[0].Nodes.Add("Deductions");//adding deduction child node

//adding all earnings to "Earnings" node
foreach (string earning in earnings)
{
    treeView1.Nodes[0].Nodes[0].Nodes.Add(earning);
}

//adding all deductions to "Deductions" node
foreach (string deduction in deductions)
{
    treeView1.Nodes[0].Nodes[1].Nodes.Add(deduction);
}
0 голосов
/ 14 июля 2011

Вместо жесткого кодирования порядковых значений, я бы предпочел извлекать данные в виде XML, а затем проходить через XML, рекурсивно, чтобы заполнить древовидное представление

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