DataGrid
используется для добавления, изменения и удаления строк данных, загружаемых из базы данных MS SQL. При добавлении новой строки если пользователь заполняет не все текстовые поля в таблицу БД сохраняется в незаполненных полях значение Null
, что в дальнейшем приводит к проблемам при работе с этой таблицей. Необходимо вместо Null
сохранять в эти поля пустую строку. Не могу понять как получить доступ к новой добавляемой строке и какое событие какого объекта перекрыть для подстановки вместо Null
пустой строки. Подскажите в какую сторону смотреть?
private void LoadEmployees()
{
string sql = "SELECT * FROM Employees";
employeesTable = new DataTable();
SqlConnection connection = null;
try
{
connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(sql, connection);
employeesAdapter = new SqlDataAdapter(command);
// установка команды на добавление для вызова хранимой процедуры
employeesAdapter.InsertCommand = new SqlCommand("sp_InsertEmployee", connection);
employeesAdapter.InsertCommand.CommandType = CommandType.StoredProcedure;
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 40, "Name"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Patronymic", SqlDbType.NVarChar, 40, "Patronymic"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Surname", SqlDbType.NVarChar, 40, "Surname"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Position", SqlDbType.NVarChar, 40, "Position"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@MobilePhone", SqlDbType.NVarChar, 20, "MobilePhone"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Rights", SqlDbType.TinyInt, 0, "Rights"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Login", SqlDbType.NVarChar, 40, "Login"));
employeesAdapter.InsertCommand.Parameters.Add(new SqlParameter("@Password", SqlDbType.NVarChar, 20, "Password"));
SqlParameter parameter = employeesAdapter.InsertCommand.Parameters.Add("@Code", SqlDbType.Int, 0, "Code");
parameter.Direction = ParameterDirection.Output;
connection.Open();
employeesAdapter.Fill(employeesTable);
dgEmployees.ItemsSource = employeesTable.DefaultView;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (connection != null)
connection.Close();
}
}
XAML
<DataGrid AutoGenerateColumns="False" x:Name="dgEmployees">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Code}" Header="Код" Width="60"/>
<DataGridTextColumn Binding="{Binding Name}" Header="Имя" Width="130"/>
<DataGridTextColumn Binding="{Binding Patronymic}" Header="Отчество" Width="130"/>
<DataGridTextColumn Binding="{Binding Surname}" Header="Фамилия" Width="130"/>
<DataGridTextColumn Binding="{Binding Position}" Header="Должность" Width="200"/>
<DataGridTextColumn Binding="{Binding MobilePhone}" Header="Мобильный телефон" Width="130"/>
<DataGridTextColumn Binding="{Binding Rights}" Header="Права доступа" Width="130"/>
<DataGridTextColumn Binding="{Binding Login}" Header="Логин" Width="130"/>
<DataGridTextColumn Binding="{Binding Password}" Header="Пароль" Width="130"/>
</DataGrid.Columns>
</DataGrid>
В общем, с проблемой разобрался, спасибо за подсказку Alexander Petrov. При подключенном к DataGrid источнике данных DataTable многие манипуляции непосредственно с DataGrid не работают. Как и не вызываются некоторые события DataTable. Помогла обработка события TableNewRow:
employeesTable.TableNewRow += new
DataTableNewRowEventHandler(EmployeesTable_NewRow);
private static void EmployeesTable_NewRow(object sender, DataTableNewRowEventArgs e)
{
e.Row["Name"] = "";
e.Row["Patronymic"] = "";
e.Row["Surname"] = "";
e.Row["Position"] = "";
e.Row["MobilePhone"] = "";
e.Row["Rights"] = 0;
e.Row["Login"] = "";
e.Row["Password"] = "";
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я не могу понять в каком виде я могу объединить $mes и foreach
Как можно вывести все загруженные изображения из таблицы wp_posts с типом attachments? и чтобы была пагинацияТ