VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 899|回复: 6

如何在DATAGRID中实现编辑功能,项目难做啊

[复制链接]

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-12-14 17:00:01 | 显示全部楼层 |阅读模式
请问各位大虾,如何在DATAGRID中实现编辑功能,我用的是C#,找了一些资料,但是功能还是未能实现,下面是我的代码,请问各为我到底应该如何修改,非常谢谢。

public void DataGrid1_EditCommand(Object sender, DataGridCommandEventArgs E)
                {
                        DataGrid1.EditItemIndex = (int)E.Item.ItemIndex;

                        LoadDatebase();//打开数据库
                        string MyComStr="select pclass_id,pclass_name from pclass";
                        sqlCommand1=new SqlCommand(MyComStr,this.myConnect);
                        sqlDataAdapter1=new SqlDataAdapter();
                        sqlDataAdapter1.SelectCommand=sqlCommand1;
                        sqlDataAdapter1.Fill(ClassDaSet,"p_signup");
                        DataGrid1.DataSource=ClassDaSet.Tables["p_signup"].DefaultView;
                        DataGrid1.DataBind();
                       
                }

                public void DataGrid1_CancelCommand(Object sender, DataGridCommandEventArgs E)
                {
                        DataGrid1.EditItemIndex = -1;

                        LoadDatebase();//打开数据库
                        string MyComStr="select pclass_id,pclass_name from pclass";
                        sqlCommand1=new SqlCommand(MyComStr,this.myConnect);
                        sqlDataAdapter1=new SqlDataAdapter();
                        sqlDataAdapter1.SelectCommand=sqlCommand1;
                        sqlDataAdapter1.Fill(ClassDaSet,"p_signup");
                        DataGrid1.DataSource=ClassDaSet.Tables["p_signup"].DefaultView;
                        DataGrid1.DataBind();
                }

                public void DataGrid1_UpdateCommand(Object sender, DataGridCommandEventArgs E)
                {
                        //string MyComStr="select pclass_id,pclass_name from pclass";
                        String updateCmd = "UPDATE pclass SET pclass_id = @Id, pclass_name = @Name";

                        SqlCommand myCommand = new SqlCommand(updateCmd, myConnection);

                        myCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.NChar, 1));
                        myCommand.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 50));
                        ;

                        myCommand.Parameters["@Id"].Value = DataGrid1.DataKeys[(int)E.Item.ItemIndex];

                        String[] cols = {"@Id","@Name"};

                        int numCols = E.Item.Cells.Count;
                        for (int i=1; i<numCols-1; i++) //跳过第一、第二和最后一列
                        {
                                String colvalue =((TextBox)E.Item.Cells[i].Controls[0]).Text;

                                // 检查在所需字段中是否有空值
                                if (colvalue == "")
                                {
                                        Message.InnerHtml = "错误:“类别名称”不允许使用空值";
                                        Message.Style["color"] = "red";
                                        return;
                                }

                                myCommand.Parameters[cols[i-1]].Value = colvalue;
                        }

                        //追加最后一行,将 true/false 值转换为 0/1
                        if (String.Compare(((TextBox)E.Item.Cells[numCols-1].Controls[0]).Text, "True", true)==0)
                                myCommand.Parameters["@Contract"].Value =  "1";
                        else
                                myCommand.Parameters["@Contract"].Value =  "0";

                        myCommand.Connection.Open();

                        try
                        {
                                myCommand.ExecuteNonQuery();
                                Message.InnerHtml = "<b>已更新记录</b><br>" + updateCmd;
                                MyDataGrid.EditItemIndex = -1;
                        }
                        catch (SqlException e)
                        {
                                if (e.Number == 2627)
                                        Message.InnerHtml = "错误:已存在具有相同主键的记录";
                                else
                                        Message.InnerHtml = "错误:未能更新记录,请确保正确填写了字段";
                                Message.Style["color"] = "red";
                        }

                        myCommand.Connection.Close();

                        LoadDatebase();//打开数据库
                        string MyComStr="select pclass_id,pclass_name from pclass";
                        sqlCommand1=new SqlCommand(MyComStr,this.myConnect);
                        sqlDataAdapter1=new SqlDataAdapter();
                        sqlDataAdapter1.SelectCommand=sqlCommand1;
                        sqlDataAdapter1.Fill(ClassDaSet,"p_signup");
                        DataGrid1.DataSource=ClassDaSet.Tables["p_signup"].DefaultView;
                        DataGrid1.DataBind();
                }
               
老提示“MESSAGE”有问题,请问我应该如何定义MESSAGE,还有各位麻烦帮看一下,到底这个代码问题出在那里,不能修改,也不能更新,晕啊,初来乍到,有点不好意思,问题很幼稚,能解决很感激。
回复

使用道具 举报

0

主题

64

帖子

45.00

积分

新手上路

Rank: 1

积分
45.00
发表于 2020-12-14 17:30:01 | 显示全部楼层
MESSAGE 是那个Label吗的ID吗
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-12-14 20:45:01 | 显示全部楼层
可能不是吧,这是从别处拷的代码,上面两个函数修改后功能都实现了,但是修改这个老是出问题。好像没有文本框。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-12-14 22:15:01 | 显示全部楼层
你的MESSAGE是個什么類啊﹖在Web中﹐提示信息最好用Script
例如:Page.Response.Write("<script>alert('错误:已存在具有相同主键的记录';)</script>")
如果你想它在編輯行顯示﹐可以添加模板列﹐在模板列中添加一個label顯示錯誤信息。例﹕
((Label)Grid.Items[i].Cells[j].Controls[0]).Text ="错误:已存在具有相同主键的记录";
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-12-15 12:15:01 | 显示全部楼层
那我是不是可以不让其修改主键,请问如何设置,还有楼上说的Script
例如:Page.Response.Write("<script>alert('错误:已存在具有相同主键的记录';)</script>")
是在HTML中添加吗??
回复

使用道具 举报

1

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-12-20 09:45:01 | 显示全部楼层
各位,请问谁有datagrid的编辑源代码,能否给我一个。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-12-21 23:15:01 | 显示全部楼层
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public class View : System.Web.UI.Page
{
        protected System.Web.UI.WebControls.DataGrid DataGridView;
        private string connectionString =  System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];

        private void BindDataGrid()
        {
                SqlConnection cn = new SqlConnection(connectionString);
                SqlCommand da = new SqlCommand( "Select * From Note", cn );
                cn.Open();
                DataGridView.DataSource = cmd.ExecuteReader();
                DataGridView.DataKeyField = "id";
                DataGridView.DataBind();
                cn.Close();
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
                if (! IsPostBack )
                {
                        BindDataGrid();
                }
        }

        #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
                InitializeComponent();
                base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
                this.DataGridView.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler

(this.DataGridView_CancelCommand);
                this.DataGridView.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler

(this.DataGridView_EditCommand);
                this.DataGridView.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler

(this.DataGridView_UpdateCommand);
                this.DataGridView.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler

(this.DataGridView_DeleteCommand);
                this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void DataGridView_EditCommand(object source, DataGridCommandEventArgs e)
        {
                DataGridView.EditItemIndex = e.Item.ItemIndex;
                BindDataGrid();
        }

        private void DataGridView_CancelCommand(object source, DataGridCommandEventArgs e)
        {
                DataGridView.EditItemIndex = -1;
                BindDataGrid();
        }

        private void DataGridView_UpdateCommand(object source, DataGridCommandEventArgs e)
        {
                TextBox txtName = (TextBox)e.Item.Cells[0].FindControl("txtName");
                TextBox txtEmail = (TextBox)e.Item.Cells[1].FindControl("txtEmail");
                TextBox txtNotes = (TextBox)e.Item.Cells[3].FindControl("txtNotes");

                SqlConnection cn = new SqlConnection( connectionString);
                string strUpdate = "Update Note set Username = @username, Email = @email, PostTime = @posttime, text= @text

Where id = @id";
                SqlCommand cmd = new SqlCommand(strUpdate, cn );
                cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = txtName.Text;
                cmd.Parameters.Add("@email", SqlDbType.VarChar).Value = txtEmail.Text;
                cmd.Parameters.Add("@posttime", SqlDbType.DateTime).Value = DateTime.Now;
                cmd.Parameters.Add("@text", SqlDbType.Text).Value = txtNotes.Text;
                cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = DataGridView.DataKeys[e.Item.ItemIndex].ToString();
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
                DataGridView.EditItemIndex = -1;
                BindDataGrid();
        }

        private void DataGridView_DeleteCommand(object source, DataGridCommandEventArgs e)
        {
                SqlConnection cn = new SqlConnection( connectionString);
                string  strDelete = "delete from Note Where id = @id";
                SqlCommand cmd = new SqlCommand(strDelete, cn );
                cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = DataGridView.DataKeys[e.Item.ItemIndex].ToString();
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
                DataGridView.EditItemIndex = -1;
                BindDataGrid();
        }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表