在 SQL Server 的 gridview 中传递选定数据行中的值

问题描述 投票:0回答:0

我有两种形式,主要形式显示网格控件和网格控件顶部的更新按钮,另一种形式是可以输入文本的更新形式。我正在使用 SQL Server 和我的代码顶部,这是主要形式的代码。

    public partial class SqlForm : Form
    {      
        DataTable dataTable = new DataTable();
        private const string mssql = @"(my mssql server)";
    }

        public SqlForm()
        {
            InitializeComponent();
            this.Load += SqlForm_Load;
            gridView1.OptionsBehavior.Editable = false;
            dataTable.Columns.Add("DptID", typeof(int));
            DataColumn departmentCodeColumn = dataTable.Columns.Add("DptCode", typeof(int));
            dataTable.Columns.Add("DptName", typeof(string));                  
            this.gridControl1.DataSource = dataTable;            
        }

我使用数据表作为数据源,这是我的更新按钮点击事件。

        private void UpdateClick_Click(object sender, EventArgs e)
        {
            if (gridView1.GetFocusedDataRow() is DataRow dr)
            {
                using (UpdateDpt update = new UpdateDpt())
                {
                    update.ShowDialog();
                    dr = update.DataRow;
                    if (update.IsUpdated)
                    {

                    }
                }
            }
        }

这是我更新表单的代码。

        public bool IsUpdated { get; private set; }
        public DataRow DataRow  { get; private set; }
        public UpdateDpt()
        {
            InitializeComponent();
            
            okClick.Click += OkClick_Click;
            cancelClick.Click += CancelClick_Click;
            this.Load += UpdateDpt_Load;
        }

        private void UpdateDpt_Load(object sender, EventArgs e)
        {

        }

        private void CancelClick_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void OkClick_Click(object sender, EventArgs e)
        {
            using (SqlConnection conn = new SqlConnection(mssql))
            {
                conn.Open();
                try
                {
                    int DptCode = Convert.ToInt32(txtDptCode.Text);
                    string DptName = txtDptName.Text;
                    int DptID = DataRow.Field<int>("DptID");
                    SqlCommand cmd = new SqlCommand("Update [Department] Set DptName= @DptName,DptCode = @DptCode Where DptID = @DptID", conn);
                    SqlParameter param = new SqlParameter("@DptCode", SqlDbType.Int);
                    param.Value = DptCode;
                    SqlParameter param1 = new SqlParameter("@DptName", SqlDbType.NVarChar);
                    param1.Value = DptName;
                    SqlParameter param2 = new SqlParameter("@DptID", SqlDbType.Int);
                    param2.Value = DptID;
                    cmd.Parameters.Add(param);
                    cmd.Parameters.Add(param1);                   
                    cmd.Parameters.Add(param2);                   
                    cmd.ExecuteNonQuery();
                    IsUpdated = true;
                    conn.Close();
                    this.Close();
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

但是有一个错误说:

"int DptID = DataRow.Field("DptID");"在数据行中为空。

我想连接主窗体的 gridview 的数据行字段并更新窗体的数据行字段。我想我必须使用数据行的 getter setter 但我不知道该怎么做。有人可以帮我吗?

c# sql-server gridview datatable crud
© www.soinside.com 2019 - 2024. All rights reserved.