Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Илья29
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 53
1

Ошибка с AutoCompleteStringCollection - Элемент autostr не существует в данном контексте

14.05.2014, 21:27. Просмотров 610. Ответов 8
Метки нет (Все метки)

Программа выдаёт только одну ошибку, ругается на элемент autostr, пишет "элемент autostr не существует в данном контексте". Как это исправить?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Xml;
using System.Xml.Linq;
using MySql.Data;
using word = Microsoft.Office.Interop.Word;
 
namespace Diagnostic
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
            Building txbx = new Building();
 
            txbx.myCommand = "SELECT namedetal FROM namedetals";
            txbx.myConnection = "DataSource=localhost;Database=arm;username=root;password=root";
            txbx.stolb = "namedetal";
 
            textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
            textBox1.AutoCompleteCustomSource = ;
 
                
        }
        class Building
        {
            public string stolb; 
            public string myConnection;
            public string myCommand;
 
            public void Connect()
            {
                AutoCompleteStringCollection autostr = new AutoCompleteStringCollection();
                MySqlConnection myConn = new MySqlConnection(myConnection);
                MySqlCommand selectCommand = new MySqlCommand(myCommand, myConn);
                MySqlDataReader myReader;
 
                myConn.Open();
                myReader = selectCommand.ExecuteReader();
 
                if (myReader != null)
                {
                    while(myReader.Read())
                    {
                        autostr.Add(myReader[stolb].ToString());
                    }
                }
            }
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2014, 21:27
Ответы с готовыми решениями:

Ошибка "элемент ds не существует в данном контексте"
private void button1_Click_1(object sender, EventArgs e) { ...

С# Элемент matrix не существует в данном контексте
В теле метода пытаюсь работать с внешней переменной массива - выдает ошибку....

C# и Outlook, MessageBox.Show не существует в данном контексте
Из стандартного майкросовтовского примера не работает MessageBox.Show пишет...

Элемент не существует в текущем контексте. Не могу найти ошибку
Собственно сам код: using System; using System.Collections.Generic; using...

Не существует в текущем контексте dataAdapter и dataSet
try { string sql = "Select * From tovar"; ...

8
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
14.05.2014, 21:52 2
Не находит, значит, такой идентификатор. Что такое autostr? Откуда ты его взял?
0
Илья29
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 53
14.05.2014, 23:04  [ТС] 3
Туда добавляются данные из таблицы. а потом должно коллекцией выдаваться в текстбокс.
0
kodv
1420 / 1094 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
15.05.2014, 06:14 4
Цитата Сообщение от Илья29 Посмотреть сообщение
Программа выдаёт только одну ошибку
Согласен, странно это ... Судя по этой строке
Цитата Сообщение от Илья29 Посмотреть сообщение
textBox1.AutoCompleteCustomSource = ;
компилятор должен выдавать минимум две ошибки:
Ошибка 1 Недопустимый элемент ";" в выражении
Ошибка 2 Требуется ";"
0
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
15.05.2014, 10:42 5
autostr - это что за тип? Где объявлен?
0
Илья29
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 53
15.05.2014, 16:45  [ТС] 6
Ребята прошу прощения строка 34 должна выглядеть так : textBox1.AutoCompleteCustomSource = autostr;
Проблема вся в том что без созданного класса всё работает(код снизу), а когда я создаю класс(код в начале темы) выдаёт ошибку описанную выше.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Xml;
using System.Xml.Linq;
using MySql.Data;
using word = Microsoft.Office.Interop.Word;
 
namespace Diagnostic
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
            try
            {
                AutoCompleteStringCollection autostr = new AutoCompleteStringCollection();
 
                string myConnection = "DataSource=localhost;Database=arm;username=root;password=root";
                string myCommand = "SELECT namedetal FROM namedetals;";
                string stolb = "namedetal";
 
                MySqlConnection myConn = new MySqlConnection(myConnection);
                MySqlCommand selectCommand = new MySqlCommand(myCommand, myConn);
                MySqlDataReader myReader;
 
                myConn.Open();
                myReader = selectCommand.ExecuteReader();
 
                if (myReader != null)
                {
                    while(myReader.Read())
                    {
                        autostr.Add(myReader[stolb].ToString());
                    }
                }
 
                textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
                textBox1.AutoCompleteCustomSource = autostr;
 
                
            }
 
            catch
            {
                MessageBox.Show("увы");
            }
 
        }
    }
}
Добавлено через 1 минуту
nmcf, он объявлен в 46 строке.
0
kodv
1420 / 1094 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
15.05.2014, 17:26 7
Илья29, читайте в книжках про область видимости переменных. Вы объявляете переменную autostr в методе Connect класса Building, а используете в методе Form2_Load класса Form2. Это противоречит семантики языка c#. Как вариант, можно сделать autostr свойством класса Building и в вышеупомянутой строке использовать именно его.
1
Илья29
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 53
15.05.2014, 22:42  [ТС] 8
всем спасибо кто поучаствовал, отдельное kodv за совет со свойствами.
В итоге сделал так(не знаю как это смотрится со стороны логики или семантики, просто я очень плохо разбираюсь в программировании, но за то работает)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Xml;
using System.Xml.Linq;
using MySql.Data;
using word = Microsoft.Office.Interop.Word;
 
namespace Diagnostic
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
 
        public void Form2_Load(object sender, EventArgs e)
        {
            Building txbx1 = new Building();
 
            txbx1.myCommand = "SELECT namedetal FROM namedetals";
            txbx1.myConnection = "DataSource=localhost;Database=arm;username=root;password=root";
            txbx1.stolb = "namedetal";
 
            textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
            textBox1.AutoCompleteCustomSource = txbx1.Autostr;
 
            Building txbx2 = new Building();
 
            txbx2.myCommand = "SELECT vidrem FROM vidrems";
            txbx2.myConnection = "DataSource=localhost;Database=arm;username=root;password=root";
            txbx2.stolb = "vidrem";
 
            textBox2.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            textBox2.AutoCompleteSource = AutoCompleteSource.CustomSource;
            textBox2.AutoCompleteCustomSource = txbx2.Autostr;
        }
        public class Building 
        {
            public string stolb; 
            public string myConnection;
            public string myCommand;
            AutoCompleteStringCollection autostr = new AutoCompleteStringCollection();
 
            public AutoCompleteStringCollection Autostr
            {
                get
                {
                    MySqlConnection myConn = new MySqlConnection(myConnection);
                    MySqlCommand selectCommand = new MySqlCommand(myCommand, myConn);
                    MySqlDataReader myReader;
 
                    myConn.Open();
                    myReader = selectCommand.ExecuteReader();
 
                    if (myReader != null)
                    {
                        while (myReader.Read())
                        {
                            autostr.Add(myReader[stolb].ToString());
                        }
                    }
                    return autostr;
                }
                set
                {
                    autostr = value;
                }
            }
        }
    }
}
Добавлено через 1 минуту
Да, кстати, если есть советы как реализовать это лучше, они принимаются! Заранее спасибо!
0
kodv
1420 / 1094 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
16.05.2014, 05:11 9
Цитата Сообщение от Илья29 Посмотреть сообщение
есть советы как реализовать это лучше, они принимаются!
Небольшие советы есть (см. комментарии в коде):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
            public AutoCompleteStringCollection Autostr
            {
                get
                {
                    MySqlConnection myConn = new MySqlConnection(myConnection);
                    MySqlCommand selectCommand = new MySqlCommand(myCommand, myConn);
                    MySqlDataReader myReader;
 
                    myConn.Open();
                    myReader = selectCommand.ExecuteReader();
 
                    if (myReader != null)
                    {
                        while (myReader.Read())
                        {
// Добавляем новую строку в список только в случае ее отсутствия, иначе при втором вызове данного метода у вас все строки задвоятся.
//А так в коллекцию добавятся только те строки, которые появились в базе между вызовами данного свойства
                            if(!autostr.Contains(myReader[stolb].ToString()))
                                autostr.Add(myReader[stolb].ToString());
                        }
                    }
                    return autostr;
                }
// Это вообще нах удалить надо. Зачем давать возможность пользователю класса изменять значение данного свойства?
/*                set
                {
                    autostr = value;
                }*/
            }
1
16.05.2014, 05:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2014, 05:11

Ошибка при выполнении программы: элемент не существует в данном контексте
задание: вывести на экран номера всех элементов, больших заданного числа...

Элемент не существует в данном контексте
Есть выражение y= ln(x^3-8)..... Создал метод для вычисления логарифма, но...

Элемент формы не существует в данном контексте
Здравствуйте, У меня есть класс и в нем есть функция, в которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru