如何在RowLeave事件中实现更新或插入功能

时间:2014-02-24 20:43:16

标签: c# sql-server datagridview crud

我创建了两个关系一对多的表:

[dbo].[tbParent]
[ParentID] [int] IDENTITY(1,1) NOT NULL,
[ParentName] [varchar](50) NOT NULL,  

PK - ParentID

[dbo].[tbChild]
[ChildID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NOT NULL,
[ChildName] [varchar](50) NOT NULL

PK - ChildID,FK - ParentID

我在数据库中创建了这两个存储过程。我想用它:

PROCEDURE [dbo].[uspUpdateData]
@ParentName NVARCHAR (50),
@ParentID INT,
@ChildName NVARCHAR (50),
@ChildID INT,
@ParentChildID INT
 AS
 BEGIN

SET NOCOUNT ON;

UPDATE tbParent
SET ParentName = @ParentName
WHERE ParentID = @ParentID

UPDATE tbChild
SET ChildName = @ChildName, ParentID = @ParentChildID
WHERE ChildID = @ChildID  
    END

PROCEDURE [dbo].[uspInsertData]
@ParentName NVARCHAR (50),
@ChildName  NVARCHAR (50)

AS
BEGIN

SET NOCOUNT ON;
DECLARE @RowID INT

INSERT INTO tbParent (ParentName) VALUES (@ParentName)

SELECT @RowID = SCOPE_IDENTITY()

INSERT INTO tbChild (ChildName, ParentID) VALUES (@ChildName, @RowID)

END

这是我的代码:

 public partial class Form1 : Form
{
    public string connString = ConfigurationManager.ConnectionStrings["dbConn"].ToString();
    private SqlConnection con;
    private string commandString = "SELECT * FROM view_parent_child";
    private SqlCommand cmd;
    private SqlDataAdapter da;
    private DataTable dt;
    private BindingSource bindingSource1 = new BindingSource();

    public Form1()
    {
        InitializeComponent();
        BindData();
    }

    private void BindData()
    {
        con = new SqlConnection(connString);
        cmd = new SqlCommand(commandString, con);
        da = new SqlDataAdapter(commandString, con);
        dt = new DataTable();
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);

        try
        {
            con.Open();
            da.Fill(dt);
            dataGridView1.DataSource = dt;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            con.Close();
        }
    }

    private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
    {
        //string pName = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
        //string cName = dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString();

        con = new SqlConnection(connString);
        cmd = new SqlCommand();
        da = new SqlDataAdapter(commandString, con);
        dt = new DataTable();
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
        int childIDstatus = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[3].Value);

        dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

        if (childIDstatus == 0)
        {
            try
            {
                con.Open();
                cmd.CommandText = "uspInsertData";
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@ParentName", SqlDbType.NVarChar).Value = pName;
                cmd.Parameters.AddWithValue("@ChildName", SqlDbType.NVarChar).Value = cName;

                cmd.Connection = con;
                cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }

        }
        else
        {
            // here I will put the Input function
        }

    }

如何使该计划有效?

0 个答案:

没有答案