Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2017, 17:41   #1
AntonCH
Пользователь
 
Регистрация: 28.11.2017
Сообщений: 58
По умолчанию C# исключение в DataGridView недопустимое значение DataGridComboBoxCell - C#

Создал несколько таблиц через "Источники данных" и для полей с внешними ключами настроил отображение в виде ComboBox. Первая таблица работает, значения подставляются. А вторая выводит ошибку c# исключение в DataGridView недопустимое значение DataGridComboBoxCell. После закрытия кучи окошек с ошибкой таблица отображается и в ComboBox стоят значение id а не name и при попытке изменить таблицу опять куча окошек с ошибками.
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace Retail
{
    public partial class MainForm : Form
    {
        SqlDataAdapter ProductAdapter;
        SqlDataAdapter VendorAdapter;
        SqlDataAdapter UsersAdapter;
        SqlDataAdapter SalesAdapter;
        DataSet SalesDS;
        DataSet UsersDS;
        DataSet ProductDS;
        DataSet VendorDS;
        public MainForm()
        {
            InitializeComponent();
            ProductDG.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
 
            ProductAdapter = new SqlDataAdapter("SELECT * FROM product;", EnterForm.sqlConn);
            ProductDS = new DataSet();
            ProductAdapter.Fill(ProductDS);
            ProductDG.DataSource = ProductDS.Tables[0];
           
            if (EnterForm.IsAdmin)
            {
                VendorAdapter = new SqlDataAdapter("SELECT * FROM vendor;", EnterForm.sqlConn);
                VendorDS = new DataSet();
                VendorAdapter.Fill(VendorDS);
                VendorDG.DataSource = VendorDS.Tables[0];
                VendorDG.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
 
                UsersAdapter = new SqlDataAdapter("SELECT * FROM users;", EnterForm.sqlConn);
                UsersDS = new DataSet();
                UsersAdapter.Fill(UsersDS);
                UsersDG.DataSource = UsersDS.Tables[0];
                UsersDG.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
 
                SalesAdapter = new SqlDataAdapter("SELECT * FROM sales;", EnterForm.sqlConn);
                SalesDS = new DataSet();
                SalesAdapter.Fill(SalesDS);
                SalesDG.DataSource = SalesDS.Tables[0];
                SalesDG.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            }
            else 
            {
                VendorTabPage.Parent = null;
                SalesTabPage.Parent = null;
                UsersTabPage.Parent = null;
            }
 
        }
 
        
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
 
        private void ProductAddBtn_Click(object sender, EventArgs e)
        {
            ProductDS.Tables[0].Rows.Add(ProductDS.Tables[0].NewRow());
        }
 
        private void ProductDelBtn_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in ProductDG.SelectedRows)
            {
                ProductDG.Rows.Remove(row);
            }
        }
 
        private void ProductSaveBtn_Click(object sender, EventArgs e)
        {
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(ProductAdapter);
            ProductAdapter.Update(ProductDS);
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'retailDataSet.sales' table. You can move, or remove it, as needed.
            this.salesTableAdapter.Fill(this.retailDataSet.sales);
            // TODO: This line of code loads data into the 'retailDataSet.users' table. You can move, or remove it, as needed.
            this.usersTableAdapter.Fill(this.retailDataSet.users);
            // TODO: This line of code loads data into the 'retailDataSet.vendor' table. You can move, or remove it, as needed.
            this.vendorTableAdapter.Fill(this.retailDataSet.vendor);
 
        }
 
        private void VendorAddBtn_Click(object sender, EventArgs e)
        {
            VendorDS.Tables[0].Rows.Add(VendorDS.Tables[0].NewRow());
 
        }
 
        private void VendorSaveBtn_Click(object sender, EventArgs e)
        {
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(VendorAdapter);
            VendorAdapter.Update(VendorDS);
        }
 
        private void VendorDeleteBtn_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in VendorDG.SelectedRows)
            {
                VendorDG.Rows.Remove(row);
            }
        }
 
        private void UsersAddBtn_Click(object sender, EventArgs e)
        {
            UsersDS.Tables[0].Rows.Add(UsersDS.Tables[0].NewRow());
        }
 
        private void UsersSaveBtn_Click(object sender, EventArgs e)
        {
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(UsersAdapter);
            UsersAdapter.Update(UsersDS);
        }
 
        private void UsersDeleteBtn_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in UsersDG.SelectedRows)
            {
                UsersDG.Rows.Remove(row);
            }
        }
 
        private void SalesAddBtn_Click(object sender, EventArgs e)
        {
            SalesDS.Tables[0].Rows.Add(SalesDS.Tables[0].NewRow());
        }
 
        private void SalesChangeBtn_Click(object sender, EventArgs e)
        {
            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(SalesAdapter);
            SalesAdapter.Update(SalesDS);
        }
 
        private void SalesDeleteBtn_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in SalesDG.SelectedRows)
            {
                SalesDG.Rows.Remove(row);
            }
        }
 
    
 
    
    }
}
Изображения
Тип файла: png 1.png (30.8 Кб, 127 просмотров)
Тип файла: png 2.png (29.3 Кб, 127 просмотров)
Тип файла: png 3.png (12.7 Кб, 168 просмотров)
Тип файла: png 4.png (20.3 Кб, 157 просмотров)
Тип файла: png 5.png (11.0 Кб, 163 просмотров)
AntonCH вне форума Ответить с цитированием
Старый 10.12.2017, 18:46   #2
AntonCH
Пользователь
 
Регистрация: 28.11.2017
Сообщений: 58
По умолчанию

Добавил обработчик ошибки
Код:
public void SalesDG_DataError(object sender, DataGridViewDataErrorEventArgs anError)
        {
            int a = productBindingSource.Count;
            int b = vendorBindingSource.Count;
            anError.ThrowException = false;
        }
Почему то в vendorBindingSource данные есть, а productBindingSource.Count = 0 хотя там должны быть данные
AntonCH вне форума Ответить с цитированием
Старый 10.12.2017, 21:33   #3
AntonCH
Пользователь
 
Регистрация: 28.11.2017
Сообщений: 58
По умолчанию

Решил проблему добавиви в блок иннициализации
Код:
            productBindingSource.DataSource = ProductDS.Tables[0];
Таким образом данные передаются.
AntonCH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как присвоить своё значение, если текущее присвоение вернуло исключение? KingMaster C# (си шарп) 4 08.02.2017 12:10
Необработанное исключение Hammerbreast C# (си шарп) 2 23.12.2015 22:41
Explorer.exe Исключение неизвестное программное исключение Windows XP, что делать? Igorilla Windows 6 02.04.2013 22:49
Исключение неизвестное программное исключение... Host-2013 Паскаль, Turbo Pascal, PascalABC.NET 19 09.02.2013 21:30
[DBNETLIB][ConnectionOpen (Invalid Instance()).]Недопустимое подключение Lunatikus БД в Delphi 0 28.02.2008 13:51