denis.larocque Ответов: 1

C# datagridview добавляет дату, когда я нажимаю флажок


всем привет!
я хочу поместить текущую дату и время в выбранную строку в ячейке Date_Pec, когда я устанавливаю флажок.
и естественно обновить базу данных sql.

спасибо за вашу помощь

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

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

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        SqlConnection con;
        SqlDataAdapter da;
        DataSet ds;
        SqlCommandBuilder builder;
        private int i;

        public Form1()

        {
           
            InitializeComponent();
            con = new SqlConnection(CONNECTION.CONNECTION_STRING_1);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // TODO: cette ligne de code charge les données dans la table 'isothermicDataSet.USR_ProdMonitor'. Vous pouvez la déplacer ou la supprimer selon les besoins.
            this.uSR_ProdMonitorTableAdapter2.Fill(this.isothermicDataSet.USR_ProdMonitor);

            string sql = "SELECT date_pec,scandate,Poste,NoSeq,Couleur,ProductionLot FROM USR_ProdMonitor WHERE (Poste = N'Parclose')";

            

             ds=new DataSet();
             da=new SqlDataAdapter(sql,con);
             da.Fill(ds);
             builder=new SqlCommandBuilder(da);
             dataGridView1.DataSource=ds.Tables[0];

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            

            bool selected = !Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["check"].Value);
            dataGridView1.Rows[1].Selected = true;

            if (selected)
            {
                SqlConnection con = new SqlConnection(CONNECTION.CONNECTION_STRING_1);
                string SqlCmdText = "INSERT INTO USR_ProdMonitor(Date_Pec)" + DateTime.Now ();


                int next = this.dataGridView1.CurrentRow.Index + 1;
                dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
                this.dataGridView1.CurrentCell = this.dataGridView1.Rows[next].Cells[this.dataGridView1.CurrentCell.ColumnIndex];
            }
            else
            {
                dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightGreen;
                dataGridView1.Rows[e.RowIndex].Cells["check"].Value = !Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells["check"].Value);
                

            }
            {

        }
        }

        

        private void button1_Click(object sender, EventArgs e)
        {
            Application.Exit();

        }

       

        

      


}
}

OriginalGriff

И что же?
Что вы делаете, чего не ожидали, или не делаете, что сделали?
А что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?

denis.larocque

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

если (выбрано)
{
SqlConnection con = new SqlConnection(CONNECTION.CONNECTION_STRING_1);
строка SqlCmdText = "вставить в USR_ProdMonitor(Date_Pec)" + DateTime.Now

OriginalGriff

"doent work" или "It doesn't work" - это, вероятно, самый бесполезный отчет о проблеме, который мы получаем, и мы получаем его много. Он ничего не говорит нам о том, что происходит или когда это происходит.
Итак, расскажите нам, что он делает, чего вы не ожидали, или не делает, что вы сделали.
Расскажите нам, что вы сделали, чтобы это произошло.
Расскажите нам, что вы пытались выяснить, почему это не сработало, и что на самом деле происходит.
Сообщайте нам о любых сообщениях об ошибках.

Ты здесь уже 6 лет! Вы уже должны знать, как задать вопрос и дать информацию, которая поможет человеку, пытающемуся ответить!

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Richard Deeming

Это недопустимая команда SQL; вы не используете параметры; и вы никогда не выполняете ее в любом случае.

using (SqlConnection con = new SqlConnection(CONNECTION.CONNECTION_STRING_1))
using (SqlCommand cmd = new SqlCommand("INSERT INTO USR_ProdMonitor (Date_Pec) VALUES (@Date_Pec)", con))
{
    cmd.Parameters.AddWithValue("@Date_Pec", DateTime.Now);
    con.Open();
    cmd.ExecuteNonQuery();
}

denis.larocque

хорошо, я попробовал это сделать, но это дает мне ошибку System.Data.SqlClient.SqlException : 'неправильный синтаксис рядом '('.'

если (выбрано)
{
SqlConnection con = new SqlConnection(CONNECTION.CONNECTION_STRING_1);

Команда sqlcommand cmd и = новая команда sqlcommand("обновление USR_ProdMonitor (Date_Pec) значения (@дата)", кон);
против.Открыть();
cmd.параметры.AddWithValue("@DATE", DateTime.Now);
УМК.Метод executenonquery();
против.Закрывать();

Richard Deeming

Ваш вопрос и ваш комментарий показывают INSERT команда.

Мой комментарий показывает, что INSERT команда.

Вы не можете просто заменить слово "вставить" на "обновить", потому что синтаксис для них совершенно разный.

Если вы хотите обновить запись, то вам необходимо выполнить допустимую команду обновления.

denis.larocque

хорошо, я начну с нуля, у меня есть BD на sql server, и эта БД уже имеет данные на нем.
в моей программе у меня есть datagrid, чтобы показать эти данные. в этой датагридке я поставил галочку.
когда я поставлю этот флажок, он изменит цвет строки и перейдет к следующей строке. (эта часть кода отлично работает)

Но я хочу в то же время добавить дату и час на ячейку в этой выбранной строке.(Date_pec) и в то же время обновите базу данных sql и обновите datagrid.
Я не нет, если им понятно (мой английский оставляет желать лучшего лолл)

Richard MacCutchan

Вы создаете SQL - соединение и оператор INSERT, но где вы на самом деле выполняете команду?

1 Ответов

Рейтинг:
12

Gerry Schmitz

Когда вы выберете свой "источник данных" в первый раз, добавьте дополнительный "столбец даты" (выберите GETDATE() как...) и используйте это поле для хранения вашей "даты" в выбранном элементе в событии изменения выбранного элемента (вместо того, чтобы возиться с самой сеткой).

Теперь у вас есть "запись" (объект), которую вы можете использовать для обновления своей БД.


denis.larocque

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

если я поставлю datagrid1.refresh(); ничего не обновится
и если я поставлю это.uSR_ProdMonitorTableAdapter.Филби(это.isothermicDataSet.USR_ProdMonitor);
это дает мне ошибку:System.NullReferenceException ссылка на объект не определяет экземпляр объекта.

denis.larocque

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
использование System.Data;
использование системы.Рисование;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
используя системы.Данных.Поставщики sqlclient;
использование системы.Конфигурация;
пространство имен WindowsFormsApp1
{
общественности частичного класс form1 : форма
{
SqlConnection con;
открытый form1()
{
метод InitializeComponent();
}

частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{
// Тодо: код этого Ligne-де-ла Данс бесплатно лес описание таблицы 'isothermicDataSet.USR_ProdMonitor'. Рандеву pouvez supprimer déplacer Ла ОУ Ла гений Ле-услышать потребности женщин.
этот.uSR_ProdMonitorTableAdapter.Филби(это.isothermicDataSet.USR_ProdMonitor);
}

частная dataGridView1_CellContentClick недействительным(объект отправителя, DataGridViewCellEventArgs е)
{

bool selected = !конвертировать.ToBoolean(dataGridView1.Rows[e.Параметр rowindex].Ячейки["проверить"].Ценность);
dataGridView1.Rows[1].Selected = true;
Ячейки datagridviewrow подряд = это.dataGridView1.Ряды[электронный.Параметр rowindex];

если (выбрано)
{

//изменить цвет строки на вкладке и изменить строку
int next = this.dataGridView1.CurrentRow.Индекс + 1;
dataGridView1.Ряды[электронный.Параметр rowindex].DefaultCellStyle.Цвет Фона = Цвет.Красный;
это.dataGridView1.CurrentCell = это.dataGridView1.Строк[далее].Ячейки[this.dataGridView1.CurrentCell.Значение columnindex];

//добавить дату в Date_pec
SqlConnection con = new SqlConnection(@"источник данных=srvqcsql-01;начальный каталог=изотермический;Интегрированная безопасность=True");
Команда sqlcommand cmd и = новая команда sqlcommand("обновление USR_ProdMonitor набор Date_PEC = функции getdate (), где пост = 'PARCLOSE и Date_PEC null и Скандатные = (выбрать первые 1 мин(Скандатные) от USR_ProdMonitor где пост = 'PARCLOSE и Date_PEC имеет значение null)", кон);

против.Открыть();
УМК.Метод executenonquery();
против.Закрывать();

}
еще
{
dataGridView1.Ряды[электронный.Параметр rowindex].DefaultCellStyle.BackColor = Цвет.Светло-зеленый;
dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки["проверить"].Значение = !Преобразовать.ToBoolean(dataGridView1.Rows[e.Параметр rowindex].Ячейки["проверить"].Ценность);

}
этот.uSR_ProdMonitorTableAdapter.Филби(это.isothermicDataSet.USR_ProdMonitor);

}


}
}

denis.larocque

Спасибо всем, все отлично работает теперь :)