Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Редактирование БД с помощью DataGridView 
:(
    Опции темы
albert21
  Дата 31.3.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Проблема в следующем:
У меня есть типизированный DataSet и DataGridView, который отображает строки одной из таблиц. Эта таблица содержит несколько полей. но обязательны для заполнения лишь первичный ключ и ещё одно поле.
В гриде создаю новую запись заполняю только обязательное поле (первичный ключ - автоинкремент) и пытаюсь перейти на предидущую запись, в этот момент появляется много сообщений об ошибке! Почему?

Посоветуйте пожалуйста какие события надо перезагрузить, чтобы отслеживать правильность вводимых значений!
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
albert21
Дата 31.3.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Извиняюсь, первая часть моего вопроса является всего лишь плодом моего воображения!
А вот события очень интересуют: когда новая строва модана. когда удалена и прочее!!!
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
-ser-
Дата 1.4.2006, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



да вы что уважаемые. стандатные операции

Код

Example
The following code example demonstrates how to use the UserAddedRow event to update a label displaying the total number of entries in a DataGridView.

private void DataGridView1_UserAddedRow(
    object sender, DataGridViewRowEventArgs e)
{
    // Update the labels to reflect changes to the number of entries.
    UpdateLabelText();
}

private void UpdateLabelText()
{
    int WithdrawalTotal = 0;
    int DepositTotal = 0;
    int SelectedCellTotal = 0;
    int counter;

    // Iterate through all the rows and sum up the appropriate columns.
    for (counter = 0; counter < (DataGridView1.Rows.Count);
        counter++)
    {
        if (DataGridView1.Rows[counter].Cells["Withdrawals"].Value
            != null)
        {
            if (DataGridView1.Rows[counter].
                Cells["Withdrawals"].Value.ToString().Length != 0)
            {
                WithdrawalTotal += int.Parse(DataGridView1.Rows[counter].
                    Cells["Withdrawals"].Value.ToString());
            }
        }

        if (DataGridView1.Rows[counter].Cells["Deposits"].Value != null)
        {
            if (DataGridView1.Rows[counter]
                .Cells["Deposits"].Value.ToString().Length != 0)
            {
                DepositTotal += int.Parse(DataGridView1.Rows[counter]
                    .Cells["Deposits"].Value.ToString());
            }
        }
    }

    // Iterate through the SelectedCells collection and sum up the values.
    for (counter = 0;
        counter < (DataGridView1.SelectedCells.Count); counter++)
    {
        if (DataGridView1.SelectedCells[counter].FormattedValueType ==
            Type.GetType("System.String"))
        {
            string value = null;

            // If the cell contains a value that has not been commited,
            // use the modified value.
            if (DataGridView1.IsCurrentCellDirty == true)
            {

                value = DataGridView1.SelectedCells[counter]
                    .EditedFormattedValue.ToString();
            }
            else
            {
                value = DataGridView1.SelectedCells[counter]
                    .FormattedValue.ToString();
            }
            if (value != null)
            {
                // Ignore cells in the Description column.
                if (DataGridView1.SelectedCells[counter].ColumnIndex !=
                    DataGridView1.Columns["Description"].Index)
                {
                    if (value.Length != 0)
                    {
                        SelectedCellTotal += int.Parse(value);
                    }
                }
            }
        }
    }

    // Set the labels to reflect the current state of the DataGridView.
    Label1.Text = "Withdrawals Total: " + WithdrawalTotal.ToString();
    Label2.Text = "Deposits Total: " + DepositTotal.ToString();
    Label3.Text = "Selected Cells Total: " + SelectedCellTotal.ToString();
    Label4.Text = "Total entries: " + DataGridView1.RowCount.ToString();
}




--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
albert21
Дата 1.4.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



UserAddedRow это не совсем то. что мне нужно. Событие возникает при начале и окончании редактирования строки, а мне нужно событие, возникающее только при окончании редактирования строки

Код

        private void dataGridParent_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //при вводе неверного типа
            if (e.Exception.TargetSite.Name == "InvokeStringParseMethod")
            {
                MessageBox.Show("В поле --" + dataGridParent.Columns[e.ColumnIndex].Name + "-- введено значение неверного типа");
            }
            //при обнаружении пустого значения в обязательном поле
            if (e.Exception.TargetSite.Name == "CheckNullable")
            {
                      //Проблема в том, что по окончании обработки редактируемая строка убивается. 
                      //а нужно, дать возможность пользователю исправить ошибку
            }
        }

--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
-ser-
Дата 3.4.2006, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



Цитата(albert21 @ 31.3.2006, 23:35 Найти цитируемый пост)
А вот события очень интересуют: когда новая строва модана. когда удалена и прочее!!!

то ты спрашиваешь одно, то непонятно что
Цитата(albert21 @ 1.4.2006, 12:13 Найти цитируемый пост)
а мне нужно событие, возникающее только при окончании редактирования строки


что это такое "окончание редактирования строки"?
повесь на Validate.


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
albert21
Дата 3.4.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Попробую внести ясность в вопрос!
Задача такая:
Добавлено @ 18:45
Пользователь щёлкает в пустой нижней строке грида чтобы начать создание новой записи, вводит некие данные, но в БД существует поля обязательные для заполнения, предположим что пользователь не ввёл данные в одно из таких полей.

Задача заключается в том, чтобы вывести диалоговое окно с требованием заполнить поле с именем "Название поля" и после нажатия пользователем кнопки "Ок" поставить курсор в ячейку записи, которая была не до конца заполнена.

У меня не получается: пробовал всякие обработчики - сообщения посылаюся не в нужный момент.
Цитата

повесь на Validate.

Например сделал обработчик на Validate

Код

        private void dataGridParent_RowValidated(object sender, DataGridViewCellEventArgs e)
        {
            MessageBox.Show("Show");
        }


Сообщение появляется в момент установки курсора в нижнюю пустую строку грида (начало создания новой записи), в момент выхода из редактируемой записи, в момент закрытия программы (некоторые записи в гриде уже есть), в момент открытия программы (некоторые записи в гриде уже есть)

Нужное мне присутствует, но я не могу отсеить это нужное от ненужного
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
-ser-
Дата 4.4.2006, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



лови.
здесь мы предпологаем что, допустим, левый столбец Col1 должен быть только числовым и не пустым.
в любой момент ESC отменяет редактирование.

Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace _DGV
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load( object sender, EventArgs e )
        {
            DataTable dt = new DataTable();
            dt.Columns.Add( "Col1" );
            dt.Columns.Add( "Col2" );

            DataRow dr;

            dr = dt.NewRow();
            dr[ 0 ] = 1;
            dr[ 1 ] = "One";
            dt.Rows.Add( dr );

            dr = dt.NewRow();
            dr[ 0 ] = 2;
            dr[ 1 ] = "Two";
            dt.Rows.Add( dr );

            dataGridView1.DataSource = dt;
        }

        int i;

        private void dataGridView1_CellValidating( object sender, DataGridViewCellValidatingEventArgs e )
        {
            if( dataGridView1.Columns[ e.ColumnIndex ].Name == "Col1" )
            {
                if( ( String.IsNullOrEmpty( e.FormattedValue.ToString() ) ) ||
                    ( !int.TryParse( e.FormattedValue.ToString(), out i ) )     )
                    {
                        dataGridView1.Rows[ e.RowIndex ].ErrorText = "Column must not be empty";
                        e.Cancel = true;
                    }
            }
        }

        void dataGridView1_CellEndEdit( object sender, DataGridViewCellEventArgs e )
        {
            // Clear the row error in case the user presses ESC.   
            dataGridView1.Rows[ e.RowIndex ].ErrorText = String.Empty;
        }

 
    }
}



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
albert21
Дата 4.4.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 10.1.2006

Репутация: нет
Всего: нет



Respect тебе, -ser- и простое человеческое спасибо!!! smile
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.