Как загрузить данные из Excel в выпадающий список при отладке приложения - PullRequest
0 голосов
/ 02 мая 2019

я пытаюсь импортировать данные из Excel в выпадающий список

Я хочу, чтобы он загружался при отладке приложения, поэтому при открытии приложения выпадающий список уже заполнен данными из Excel

public void fill_comboBox()
        {
            xlApp = new Excel.Application();
            try
            {
                xlWb = xlApp.Workbooks.Open("C:\\Users\\Desktop\\Acct.No.xlsx"); //example path
                xlWS = xlWb.Sheets[1];
                xlRange = xlWS.UsedRange;

                row = xlRange.Rows.Count;
                col = xlRange.Columns.Count;


                fulldata = new string[row][];


                for (int i = 0; i < fulldata.Length; i++)
                {
                    fulldata[i] = new string[col];

                }

                for (int i = 0; i < row; i++)
                {
                    for (int j = 0; j < col; j++)
                    {
                        fulldata[i][j] = xlWS.Cells[i + 1, j + 1].value2.ToString();
                        //MessageBox.Show(fulldata[i][j]);
                    }
                }

                closeExcel(xlApp);


                for (int i = 0; i < col; i++)
                {
                    comboBox1.Items.Add(fulldata[i][0]);
                }

            }
            catch (Exception e)
            {

            }
        }

и я поместил функцию в


       public Form1()
        {
            fill_comboBox();
            InitializeComponent();
        }

Я не знаю, где ошибка, потому что она не работает после отладки приложения

Ожидаемый результат = все данные изExcel находится в выпадающем списке после отладки приложения без нажатия какой-либо кнопки

фактический результат = нет данных в выпадающем списке

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Использовать объект управления пользовательским интерфейсом после готовности компонента (InitializeComponent)

Таким образом, вы должны изменить ниже:

   public Form1()
   {
       InitializeComponent();
       fill_comboBox(); // do after components initialized 
   }

Кстати, в C # combobox можно указывать DisplayField и ValueField, это будет легко понять

Установить поле по:

   ComboBox.DisplayMember = "Text";
   ComboBox.ValueMember = "Value";
   ComboBox.Items.Add(new { Text = "text", value = "value" });
0 голосов
/ 02 мая 2019

Не помещайте вызовы методов, которые включают элементы управления, до InitializeComponent - InitializeComponent устанавливает элементы управления формой, и обычно это должно произойти вначале

Я бы порекомендовал вам вместо этого поместить вызов fill_Combobox в обработчик событий Form_Load. Показать конструктор форм, щелкните любую пустую часть фона формы, чтобы выбрать форму, щелкните значок молнии в сетке свойств, чтобы переключиться на список событий для формы, дважды щелкните пустую ячейку рядом с параметром «Загрузить». Редактор переключается на представление кода внутри вновь созданного метода Form_Load или аналогичного. Вместо этого положите туда свой звонок

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