مشکل در آپدیت کردن یک جدول بانک اطلاعاتی با دو کلید اصلی

mksalehi

عضویت : 1397/11/13 پرسش ها : 1 پاسخ ها : 0

مشکل در آپدیت کردن یک جدول بانک اطلاعاتی با دو کلید اصلی

ارسال شده در : ‫۶ ماه قبل، سه شنبه ۱۹ شهریور ۱۳۹۸، ساعت ۰۰:۱۰

با سلام خدمت استاد عزیز جناب آقای مدائنی

 

بنده یک جدول در sqlserver به نام tbl_product (جدول کالا ها) دارم با سه فیلد   id int primarykey  و product_id nvarchar و product_name nvarchar (آی دی که کلید اصلی و اتواینکریمنت است و کد کالا که اون هم کلید اصلی می باشد و نام کالا) و یک استور پروسیجر برای آپدیت  که بتوانم کد کالا و نام کالا را ویرایش نمایم .هنگامی که عمل ویرایش را در یک فرم با یک باتون انجام می دهم اگر هم کد کالا و هم نام کالا را ویرایش نمایم عمل ویرایش صورت گرفته و تغییرات در گرید ویو نمایش داده می شود اما زمانی که فقط قصد ویرایش نام کالا را داشته باشم عمل ویرایش صورت می گیرد اما تغییرات در گرید ویو نشان داده نمی شود مگر اینه فرم را بسته و مجددا برنامه را استارت کنم .  تصویر فرم  و کد برنامه :

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;


namespace WindowsFormsApplication1
{
    public partial class frmkala : Form
    {
        
        enum frmstate
        {
            normal,
            insert,
            edit,
            del
        }
        DCSerialDataContext db = new DCSerialDataContext();
        frmstate obj = new frmstate();
        public frmkala()
        {
            InitializeComponent();
        }
     
    private void frmkala_Load(object sender, EventArgs e)
        {
         
            obj = frmstate.normal;
            txtname.Enabled = txtcode.Enabled = false;
            dgwkala.DataSource =db.tblproduct_selall_();       
            
        }



    
    private void btninsert_Click(object sender, EventArgs e)
    {
        obj = frmstate.insert;
        txtcode.Enabled = txtname.Enabled = true;
        txtcode.Text = txtname.Text = "";
        btninsert.Enabled = false;
    }
    private void txtcode_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
        {
            e.Handled = true;
        }
    }

    private void btnupdate_Click(object sender, EventArgs e)
    {
        obj = frmstate.edit;
        txtcode.Enabled = txtname.Enabled = true;
    }

    private void btndel_Click(object sender, EventArgs e)
    {
        obj = frmstate.del;
    }

    private void btndelfilter_Click(object sender, EventArgs e)
    {
        obj = frmstate.normal;
        dgwkala.DataSource = db.tblproduct_selall_();
        txtsearch.Text = "";
        
    }

    private void btnsearch_Click(object sender, EventArgs e)
    {
        if (combkala.Text == "کد کالا")
        {
            dgwkala.DataSource = db.tblproduct_selcod(txtsearch.Text);
        }
        else if (combkala.Text == "نام کالا")
        {
            dgwkala.DataSource = db.tblproduct_selname(txtsearch.Text);
        }

    }
        public void Sabt()
        {
          db.SubmitChanges();
          dgwkala.DataSource = db.tblproduct_selall_();
         obj = frmstate.normal;
          btninsert.Enabled = true;
          txtname.Enabled = txtcode.Enabled = false;
        }
        
   

    private void btnsave_Click(object sender, EventArgs e)
    {

     // inset new record...

            if (obj == frmstate.insert)
            {
              if (txtcode.Text == "")
                {
                  errorProvider1.SetError(txtcode, "لطفا فیلد کد کالا را تکمیل نمائید");
                }
              else if (txtname.Text == "")
              {
                  errorProvider1.Clear();
                  errorProvider1.SetError(txtname, "لطفا فیلد نام کالا را تکمیل نمائید");
              }
              else
              {
                  errorProvider1.Clear();
                  var q = db.tbl_Products.Where(c => c.Prodact_Id == txtcode.Text);
                  
                  if (q.Count() != 0)
                  {
                      MessageBox.Show("کد کالا تکراری است لطفاً دوباره سعی کنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
                      txtcode.Focus();
                      txtcode.SelectAll();
                  }
                  else
                  {
                      db.tblproduct_insert(txtcode.Text , txtname.Text);
                      Sabt();
                      
                  }
              }
           }
            
     //  edit record 

            else if(obj==frmstate.edit)
            {
                if (txtcode.Text == "")
                {
                    errorProvider1.SetError(txtcode, "لطفا فیلد کد کالا را تکمیل نمائید");
                }
                else if (txtname.Text == "")
                {
                    errorProvider1.Clear();
                    errorProvider1.SetError(txtname, "لطفا فیلد نام کالا را تکمیل نمائید");
                }
                else
                {
                    errorProvider1.Clear();
                    int id = int.Parse(dgwkala.CurrentRow.Cells[0].Value.ToString());
                    var q = db.tbl_Products.Where(c => c.Prodact_Id.Contains(txtcode.Text));
                    if (q.Count() != 0)
                    {
                        
                        MessageBox.Show("کد کالا تکراری است فقط نام کالا تغییر می کند", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Warning);   
                    }
                    db.tblproduct_upd(id, txtcode.Text, txtname.Text);
                    Sabt();
                    
                }
            }

       // delete record

            else if(obj == frmstate.del)
            {
                
                string name = dgwkala.CurrentRow.Cells[2].Value.ToString();

                if (MessageBox.Show(string.Format("آیا از حذف کالای   {0} مطمئن هستید؟ ", name),"توجه",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
              {
                 var lastrowsel = dgwkala.CurrentRow.Cells[0].Value.ToString();
                 db.tblproduct_del(int.Parse(lastrowsel));
                 Sabt();
              }
              else 
              {
                MessageBox.Show("عملیات حذف کنسل شد", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Sabt();
              }
            }      
    }

    private void dgwkala_SelectionChanged_1(object sender, EventArgs e)
    {
        txtcode.Text = dgwkala.CurrentRow.Cells[1].Value.ToString();
        txtname.Text = dgwkala.CurrentRow.Cells[2].Value.ToString();
    }
     
    }
}
USE [DBSerial]
GO
/****** Object:  StoredProcedure [dbo].[tblproduct_upd]    Script Date: 18/06/1398 11:59:06 ب.ظ ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[tblproduct_upd]
@id int,
@code nvarchar(15),
@name nvarchar(50)
as
begin
update tbl_Product set Prodact_Id=@code,Prodact_Name=@name
where id=@id
end

USE [DBSerial]
GO
/****** Object:  StoredProcedure [dbo].[tblproduct_selall ]    Script Date: 19/06/1398 12:00:13 ق.ظ ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[tblproduct_selall ]
as
begin
 select * from tbl_Product
end

البته ببخشید بنده خیلی مبتدی هستم دوستان خورده نگیرند تازه دارم تاتی تاتی می کنم و این کد ها مال قبل از دیدن فیلم های استاد مدائنی می باشد و سعی می کنم روش اصولی کد نویسی رو یاد بگیرم.

خواهشمندم راهنمایی نمائید.

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 10559
ارسال شده در :‫۶ ماه قبل، شنبه ۲۳ شهریور ۱۳۹۸، ساعت ۰۸:۰۰

سلام 

باید context را مجدد new کنید 

میتونید در using قرار دهید تا بعد از استفاده dispose بشه

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید