Dungg Lee Ответов: 1

Как добавить новый компонент со значениями поля со списком в базу данных?


- Это моя функция добавления, чтобы попытаться добавить новый компонент с помощью поля со списком, но она всегда терпит неудачу, потому что не может получить данные в cbbDivision,

private bool save()
        {
            try
            {
                if (txtMoney != null && txtSubject != null && txtMemo1 != null
                        && txtTitle != null && txtAmount != null && txtMemo2 != null)
                {
                    DateTime date;
                    string division = "";
                    float money;
                    string subject = "";
                    string memo1 = "";
                    string title = "";
                    int amount;
                    string memo2 = "";

                    date = DateTime.Parse(dtDate.Value.ToString());
                    division = cbbDivision.Text.ToString();
                    money = float.Parse(txtMoney.Text.ToString());
                    subject = txtSubject.Text.ToString();
                    memo1 = txtMemo1.Text.ToString();
                    title = txtTitle.Text.ToString();
                    amount = Int32.Parse(txtAmount.Text.ToString());
                    memo2 = txtMemo2.Text.ToString();

                    HanbiDBDataContext db = new HanbiDBDataContext();
                    DataManage data = new DataManage();

                    data.Date = date;
                    data.divId = Int32.Parse(cbbDivision.GetItemText(cbbDivision.SelectedItem));
                    data.Money = money;
                    data.Subject = subject;
                    data.Memo1 = memo1;
                    data.Title = title;
                    data.Amount = amount;
                    data.Memo2 = memo2;

                    db.DataManages.InsertOnSubmit(data);
                    db.SubmitChanges();

                    XtraMessageBox.Show("Add Success!");
                }
                return true;
            }
            catch (Exception)
            {
                XtraMessageBox.Show("Please insert information!", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
        }


- Это моя БД:

CREATE TABLE DataManage
(
	Id int primary key identity (1, 1), 
	[Date] datetime,
	[Subject] varchar(200),
	Title varchar(200),
	[Money] float,
	Memo1 varchar(200),
	Memo2 varchar(200),
	Amount int,
	divId int foreign key references Division(dId)
)


CREATE TABLE Division
(
	dId int primary key identity(1, 1),
	dName varchar(10)
)


- Я использую LINQ для подключения к базе данных и отображения данных с помощью GridControl. И я получаю значения таблицы деления с помощью dataBindingSource

private void AddNew_Load(object sender, EventArgs e)
        {
            HanbiDBDataContext db = new HanbiDBDataContext();

            divisionBindingSource.DataSource = db.Divisions.ToList();
        }


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

Я пытался добавить новые значения в поле со списком вручную и снова проверить, но это все равно ошибка. Кто - нибудь может помочь мне решить эту проблему, пожалуйста?

F-ES Sitecore

Что происходит, когда вы проходите через отладчик? Как далеко может зайти код? Какой путь он избирает? Вы получаете исключения, брошенные?

Dungg Lee

Когда я запускаю его, он всегда идет на catch(ex), что означает, что данные в combobox равны нулю, потому что когда я удаляю эту строку:

данных.дивиди = int32 значение.Синтаксический анализ(cbbDivision.GetItemText(cbbDivision.Элемент));

Он может добавить новый компонент.

F-ES Sitecore

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

1 Ответов

Рейтинг:
2

Mike V Baker

Я вижу, что у вашего cbbDivision есть свой собственный источник привязки, это хорошо. Обычно вы не хотите предполагать, что текст, отображаемый в cbb, - это то, что вы хотите сохранить. Вы действительно хотите сохранить значение идентификатора. При настройке cbbDivision вы установить значение параметра В же отдела и 'экран' param в вимя? Если это так, то то, что вы хотите сделать, это получить выбранный элемент из cbb и использовать его, чтобы получить идентификатор, который вы хотите вставить в запись. Вам не нужно будет Int32.parse его, так как часть ID уже должна быть идентификатором из базы данных.

// cast selected item as Division and insert id
data.divId = ((Division)cbbDivisions.getSelectedItem()).dId
ХТХ, Майк