Отображение значений списка в текстовых полях - PullRequest
0 голосов
/ 01 августа 2011

Я создаю приложение в Visual Studio 2010 C # и MySQL, где пользователь может добавлять, редактировать, просматривать сотрудника. Я уже сделал с добавлением и просмотром части. Однако я немного запутался в редактировании. У меня есть этот listView в моей форме, где он отображает всех сотрудников, добавленных в базу данных. Я хочу, чтобы каждый раз, когда пользователь выбирал сотрудника и нажимал кнопку редактирования, я хотел, чтобы значения, сохраненные в базе данных, отображались в соответствующих текстовых полях под списком просмотра. Может кто-нибудь подсказать мне, как это сделать? Пожалуйста

Скриншот: enter image description here

Код для просмотра списка:

private void getEmployee()
    {
        listViewEmployee.Items.Clear();
        string cmd = "select employee_number, employee_lastname, employee_firstname, employee_middlename, employee_position, employee_datehired from employee";
        DBConn db = new DBConn();
        DataTable tbl = db.retrieveRecord(cmd);
        foreach (DataRow row in tbl.Rows)
        {
            ListViewItem lv = new ListViewItem(row[0].ToString());
            lv.SubItems.Add(row[1].ToString() + ", " + row[2].ToString() + " " + row[3].ToString());
            lv.SubItems.Add(row[4].ToString());
            lv.SubItems.Add(row[5].ToString());
            listViewEmployee.Items.Add(lv);
        }
    }

    private void textBoxSearchEmployee_TextChanged(object sender, EventArgs e)
    {
        string cmd = "SELECT employee_number, employee_lastname, employee_firstname, employee_middlename, employee_position, employee_datehired FROM employee where employee_lastname Like '" + textBoxSearchEmployee.Text + "%'";
        listViewEmployee.Items.Clear();
        DBConn db = new DBConn();
        DataTable tbl = db.retrieveRecord(cmd);
        foreach (DataRow row in tbl.Rows)
        {
            ListViewItem lv = new ListViewItem(row[0].ToString());
            lv.SubItems.Add(row[1].ToString() + ", " + row[2].ToString() + " " + row[3].ToString());
            lv.SubItems.Add(row[4].ToString());
            lv.SubItems.Add(row[5].ToString());
            listViewEmployee.Items.Add(lv);
        }
    }

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Мне кажется, вы можете заполнить только listView.

Несколько указателей:

1) Способ написания вашего оператора SQL теперь склонен к SQL-инъекции . Используйте параметры в ваших командах SQL вместо прямой конкатенации переменных к вашему запросу. См. этот вопрос для примера того, как это сделать.

2) В зависимости от того, где расположены ваши другие соответствующие данные (т. Е. Если ваша база данных нормализована), вам может потребоваться выполнить объединение в вашем запросе.

string sqlQuery = "SELECT * FROM employee 
JOIN other_employee_data_table on other_employee_data_table.employeeID = employee.ID
WHERE employee.employee_lastname LIKE @employee_lastname +'%'"

Но если ваша таблица employee содержит все данные, объединение не требуется. Просто получите всю необходимую информацию из этой таблицы.

3) Как только вы получите всю необходимую вам информацию, достаточно просто прочитать эти данные и присвоить их соответствующим полям.

Псевдокод:

using (MySqlConnection connection = new MySqlConnection(connectionString))
{
   connection.Open(); 
   MySqlCommand command = connection.CreateCommand();
   command.CommandText = sqlQuery;
   command.CommandType = System.Data.CommandType.Text;
   // add parameters in this line
   using (MySqlDataReader reader = command.ExecuteReader())
   {  
      while (reader.Read()) 
      {     
         // iterate in each row
         for (int i = 0; i < reader.FieldCount; i++)
         {
            // iterate each column using reader.GetValue(i)
         }
      }
   }
}
2 голосов
/ 01 августа 2011

Когда пользователь нажимает кнопку «Редактировать» ...

  1. Получить выбранного сотрудника
  2. Используйте SELECT для получения информации о выбранном сотруднике
  3. Заполнить текстовые поля информацией о выбранном сотруднике

Например,

String employee = listViewEmployee.Text;
String cmd = "SELECT * FROM employee WHERE employee_lastname='" + employee + "'";
DBConn db = new DBConn();
DataTable tbl = db.retrieveRecord(cmd);
txtLastName.Text = tbl.Rows[0][0];
// ... 
// etc.

Примечание: плохая идея объединять значения в запрос SQL, потому что, если значения являются вредоносными, может быть выполнен другой запрос. Например, если employee имеет значение x' OR '1'='1; DROP TABLE employee; -- или что-то в этом духе, то таблица сотрудника может быть удалена. Обходным путем является использование хранимых процедур или параметризованных запросов.

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