Member 12951338 Ответов: 2

[C#] nullreferenceexception при поиске в datagridview из другой формы


Я не знаю, что вызывает эту проблему. У меня есть 2 формы (форма поиска и форма счетов) в форме счетов есть кнопка поиска, которая открывает поиск.
Код для открытия формы поиска:
private void btnSearch_Click(object sender, EventArgs e) {
            SearchForm sf = new SearchForm();
            sf.ShowDialog();
        }


В форме поиска это коды:
public partial class SearchForm : Form {
        public static string search;
        private readonly AcctsForm rf;

        public SearchForm(AcctsForm actform) {
            rf = actform;
        }

        public SearchForm() {
            InitializeComponent();
        }

        private void btnOK_Click(object sender, System.EventArgs e) {
            search = textBox1.Text;
            rf.SearchedList("SELECT * FROM Employees_Info WHERE Emp_ID = @Search");
            this.Close();
        }
    }


Из формы учетные записи (на событие SearchedList ссылается кнопка Search OK):
public void SearchedList(string x) {
            try {
                using (sqlSelect = new SqlDataAdapter(x, conn)) {
                    sqlSelect.SelectCommand.Parameters.AddWithValue("@Search", SearchForm.search);
                    sqldt = new DataTable();
                    sqlSelect.Fill(sqldt);
                    if (sqldt.Rows.Count >= 1) {
                        dgvEmployees.DataSource = sqldt;
                    } else {
                        MessageBox.Show("not results found.");
                    }
                }
            } catch (SqlException err) {
                MessageBox.Show(err.Message);
            } finally {
                if (conn.State == ConnectionState.Open) {
                    conn.Close();
                }
            }
        }


Что я уже пробовал:

Когда я ищу значение/данные в текстовом поле поиска, которое не зарегистрировано в базе данных, messagebox "no results found" работает, но когда вводится правильное значение, оно выдает исключение NullReferenceException. Я уже все погуглил и попробовал "создать экземпляр" форума учетных записей, но он ничего не делает (модификаторы уже установлены на Public). Есть идеи? Заранее спасибо всем, кто может помочь!

2 Ответов

Рейтинг:
1

Dave Kreskowiak

Погуглив это, вы не получите никаких ответов. Вы должны использовать отладчик для этого кода и найти переменную, которая является нулевой при возникновении исключения. Затем пройдите назад по коду и выясните, почему переменная содержит null.

Мы не можем сделать это для тебя. Мы не можем запустить код, и у нас нет данных, которые использует ваш код.


Member 12951338

Исключение NullReferenceException находится в "rf.SearchedList("SELECT * FROM Employees_Info WHERE Emp_ID = @Search");" при нажатии кнопки OK. Он также выдает ту же ошибку при использовании любых действий, ссылающихся на "rf", таких как rf.close (), поэтому мне интересно, почему он это делает.

Dave Kreskowiak

Потому что вы никогда не устанавливаете rf быть чем угодно до того, как этот код был вызван.

Отладчик легко сказал бы вам это.

Рейтинг:
0

Wendelius

Насколько я вижу, когда вы создаете форму поиска, вы вызываете конструктор по умолчанию, а не тот, в котором форма учетной записи определена в качестве параметра. Позже в коде вы попытаетесь использовать переменную rf, который является null потому что вы использовали не тот конструктор.

Если btnSearch находится в форме учетной записи, попробуйте выполнить следующие действия

private void btnSearch_Click(object sender, EventArgs e) {
            SearchForm sf = new SearchForm(this);
            sf.ShowDialog();
        }

Не забудьте использовать отладчик,чтобы увидеть, как выполняется код.