C# VS2010 Бланки заявленийC# Bound значение не соответствует базе данных
У меня есть C# проект с базой данных SQL Server (.mdf
файл), который включает в себя поле ID, тип данных INT, обнуляет не допускается; так что он автоматически вводит.
В моей основной форме я привязал таблицу к источнику привязки, а поле идентификатора привязано к метке.
Все формы управления и связующие свойства для них были сделаны без кода в окне свойств.
Форма включает в себя связующее средство, которое имеет кнопку + (добавить запись). В тот момент, когда нажата кнопка +, для поля ID присваивается значение -1; предположительно как временное значение, но это происходит автоматически без какого-либо кода.
Затем, когда я вставляю все значения в связанных элементах управления в соответствующие столбцы базы данных (этот код работает правильно), за исключением идентификатора, который автоматически назначается базой данных (auto incrementing int). Так вот почему значение в связанном элементе управления не совпадает с значением, хранящимся в базе данных.
Это мешает мне продолжить создание метода для удаления записи путем ссылки на поле идентификатора, поскольку значение (-1) в связанном элементе управления недействительно, то есть такая запись не существует в базе данных.
Я пробовал метод BindingSource.ResetBindings
и обновлял метку, но значение остается -1 до выхода и перезапуска программы.
Я также нашел предложения, чтобы попытаться установить BindingSource.DataSource
значение null, а затем восстановить, но попытка установить источник данных или датаметр на null вызывает исключение. Я нашел другой, который предложил установить BindingSource.RaiseListChangedEvents
на false, но исключение все же произошло.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Address_Book
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
//***Program Execution***
fillContactGrid();
}
private void fillContactGrid()
//This method retrieves and displays all records from ContactInfo
{
//Create a connection to the database
using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.ContactsConnectionString))
{
//Construct the SQL Query string
string sqlQuery = "SELECT * FROM ContactInfo";
//Open the connection
connection.Open();
//Pass the query to the database and receive dataset
SqlDataAdapter dataadapter = new SqlDataAdapter(sqlQuery, connection);
DataSet ds = new DataSet();
dataadapter.Fill(ds, "ContactInfo");
//Close the connection
connection.Close();
//Load the dataset into GridView
contactsGridView.DataSource = ds;
contactsGridView.DataMember = "ContactInfo";
}
}
private void FormMain_Load(object sender, EventArgs e)
{
//Initialize contactsDataSet
this.contactInfoTableAdapter.Fill(this.contactsDataSet.ContactInfo);
}
private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
{
disableNavigation();
//Show save and cancel buttons
buttonSave.Visible = true;
buttonCancel.Visible = true;
}
private void disableNavigation()
{
//Temporarily disable navigator controls
bindingNavigatorAddNewItem.Enabled = false;
bindingNavigatorDeleteItem.Enabled = false;
bindingNavigatorPositionItem.Enabled = false;
bindingNavigatorMoveFirstItem.Enabled = false;
bindingNavigatorMoveLastItem.Enabled = false;
bindingNavigatorMoveNextItem.Enabled = false;
bindingNavigatorMovePreviousItem.Enabled = false;
}
private void buttonCancel_Click(object sender, EventArgs e)
{
//Cancel new record entry
contactInfoBindingSource.RemoveCurrent();
//Hide save and cancel buttons
buttonSave.Visible = false;
buttonCancel.Visible = false;
enableNavigation();
}
private void enableNavigation()
{
//Enable navigator controls
bindingNavigatorAddNewItem.Enabled = true;
bindingNavigatorDeleteItem.Enabled = true;
bindingNavigatorPositionItem.Enabled = true;
bindingNavigatorMoveFirstItem.Enabled = true;
bindingNavigatorMoveLastItem.Enabled = true;
bindingNavigatorMoveNextItem.Enabled = true;
bindingNavigatorMovePreviousItem.Enabled = true;
}
private void buttonSave_Click(object sender, EventArgs e)
{
insertNewContact();
}
private void insertNewContact()
{
using (SqlConnection connection = new SqlConnection(Properties.Settings.Default.ContactsConnectionString))
{
//***Construct the SQL Command string
//Format: INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...)
//Command
string sqlCmd = "INSERT INTO ";
//Table name
sqlCmd += @"ContactInfo ";
//Column names
sqlCmd += @"(LastName, ";
sqlCmd += @"FirstName, ";
sqlCmd += @"Relationship, ";
sqlCmd += @"Title, ";
sqlCmd += @"Company, ";
sqlCmd += @"OfficePhone, ";
sqlCmd += @"OfficeExtension, ";
sqlCmd += @"CellPhone, ";
sqlCmd += @"HomePhone, ";
sqlCmd += @"Email1, ";
sqlCmd += @"Email2) ";
//Values
sqlCmd += @"VALUES ";
sqlCmd += @"(@LastName, ";
sqlCmd += @"@FirstName, ";
sqlCmd += @"@Relationship, ";
sqlCmd += @"@Title, ";
sqlCmd += @"@Company, ";
sqlCmd += @"@OfficePhone, ";
sqlCmd += @"@OfficeExtension, ";
sqlCmd += @"@CellPhone, ";
sqlCmd += @"@HomePhone, ";
sqlCmd += @"@Email1, ";
sqlCmd += @"@Email2)";
//Open the connection
connection.Open();
//Pass the command to the database
using (SqlCommand command =new SqlCommand(sqlCmd, connection))
{
command.Parameters.Add("@LastName", SqlDbType.NChar).Value = textLastName.Text;
command.Parameters.Add("@FirstName", SqlDbType.NChar).Value = textFirstName.Text;
command.Parameters.Add("@Relationship", SqlDbType.NChar).Value = textRelationship.Text;
command.Parameters.Add("@Title", SqlDbType.NChar).Value = textTitle.Text;
command.Parameters.Add("@Company", SqlDbType.NChar).Value = textCompany.Text;
command.Parameters.Add("@OfficePhone", SqlDbType.NChar).Value = textOfficePhone.Text;
command.Parameters.Add("@OfficeExtension", SqlDbType.NChar).Value = textOfficeExtension.Text;
command.Parameters.Add("@CellPhone", SqlDbType.NChar).Value = textCellPhone.Text;
command.Parameters.Add("@HomePhone", SqlDbType.NChar).Value = textHomePhone.Text;
command.Parameters.Add("@Email1", SqlDbType.NChar).Value = textEmail1.Text;
command.Parameters.Add("@Email2", SqlDbType.NChar).Value = textEmail2.Text;
try
{
int rows = command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
connection.Close();
buttonSave.Visible = false;
buttonCancel.Visible = false;
enableNavigation();
}
}
private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
//Update the binding grid when its tab is selected
fillContactGrid();
}
}
}
Можете ли вы опубликовать код, вызывающий исключение? – Eoin
contactInfoBindingSource.DataSource = null; Невозможно связать с идентификатором свойства или столбца в DataSource. – ashur668
Редактировать вопрос и вставить этот код, вставьте окружающий код, чтобы другие пользователи могли понять, что вы делаете - возьмите здесь код, например: http://stackoverflow.com/questions/ 35753030/collect-steps-of-two-twodimensional-arrays-2048 – Eoin