ASP.NET - 以编程方式使用 GridView [英] ASP.NET - working with GridView Programmatically

查看:22
本文介绍了ASP.NET - 以编程方式使用 GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我继续这篇文章.

经过多次谷歌搜索,我想出了这个代码来以编程方式编辑单元格:

使用系统;使用 System.Data;使用 System.Configuration;使用 System.Collections;使用 System.Web;使用 System.Web.Security;使用 System.Web.UI;使用 System.Web.UI.WebControls;使用 System.Web.UI.WebControls.WebParts;使用 System.Web.UI.HtmlControls;使用 Ice_Web_Portal.BO;命名空间 GridView___Test{公共部分类 _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){GridView1.DataSource = Course.GetCourses();GridView1.DataBind();}protected void GridView1_RowEditing(对象发送者,GridViewEditEventArgs e){GridViewRow 行 = GridView1.Rows[e.NewEditIndex];GridView1.EditIndex = e.NewEditIndex;GridView1.DataSource = Course.GetCourses();GridView1.DataBind();}受保护的无效 GridView1_RowUpdating(对象发送者,GridViewUpdateEventArgs e){TextBox txtID = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0];TextBox txtCourseCode = (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];TextBox txtCourseName = (TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0];TextBox txtCourseTextBookCode = (TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0];课程项目 = 新课程();item.ID = Convert.ToInt32(txtID.Text);item.CourseCode = txtCourseCode.Text;item.CourseName = txtCourseName.Text;item.TextBookCode = txtCourseTextBookCode.Text;bool 成功 = Course.Update(item);labMessage.Text = success.ToString();GridView1.EditIndex = -1;GridView1.DataSource = Course.GetCourses();GridView1.DataBind();}}}

但是有两个问题正在发生.

(1) 我需要按两次命令按钮来编辑/更新.

(2) 单元格值的更改不会在数据库中更新.IE.编辑的单元格值未提交.

谁能给我一个解决方案?

更新:我的解决方案是这样的:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GridView___Test._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="服务器"><title>无标题页</title><身体><form id="form1" runat="server"><div><asp:GridView ID="GridView1" runat="server" Font-Names="Verdana" Font-Size="Small" AutoGenerateColumns="False" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating"></asp:GridView>

</表单>命名空间 GridView___Test{公共部分类 _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){//如果(!Page.IsPostBack){创建网格视图();}}私有无效 CreateGridView(){GridView1.Columns.Clear();DataTable dataTable = Book.GetBooksDataSet().Tables[0];CommandField cf = new CommandField();cf.ShowEditButton = true;GridView1.Columns.Add(cf);int colCount = 1;foreach(dataTable.Columns 中的 DataColumn c){BoundField boundField = new BoundField();boundField.DataField = c.ColumnName;boundField.HeaderText = c.ColumnName;//boundField.FooterText = "---";if (colCount == 3 || colCount == 5){boundField.ReadOnly = true;}GridView1.Columns.Add(boundField);colCount++;}GridView1.ShowFooter = true;GridView1.DataSource = 数据表;GridView1.DataBind();GridViewRow footerRow = GridView1.FooterRow;按钮 b = 新按钮();b.Text = "新增";int i = 0;footerRow.Cells[i].Controls.Add(b);foreach(dataTable.Columns 中的 DataColumn c){++i;文本框 tb = 新文本框();footerRow.Cells[i].Controls.Add(tb);}}protected void GridView1_RowCommand(对象发送者,GridViewCommandEventArgs e){int index = Convert.ToInt32(e.CommandArgument);if (e.CommandName == "Edit"){//使GridView进入编辑模式.GridView1.EditIndex = 索引;GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index];//我们可以像这样获取单元格数据字符串 id = selectedRow.Cells[1].Text;string isbn = selectedRow.Cells[2].Text;//这是GridView显示所必需的.创建网格视图();}else if (e.CommandName == "Update"){LinkBut​​ton updateButton = (LinkBut​​ton)e.CommandSource;DataControlFieldCell dcfc = (DataControlFieldCell)updateButton.Parent;GridViewRow gvr = (GridViewRow)dcfc.Parent;//更新...................//更新网格数据到数据库UpdateDataInTheDatabase(gvr.Cells[1].Controls);//网格恢复正常GridView1.EditIndex = -1;//这是GridView显示所必需的.创建网格视图();}}私有无效 UpdateDataInTheDatabase(ControlCollection cc){文本框 tb = (文本框)cc[0];//...//...//...//这里调用更新持久化代码...}#region 应用程序令人满意的事件处理程序protected void GridView1_RowEditing(对象发送者,GridViewEditEventArgs e){}protected void GridView1_RowCancelingEdit(对象发送者,GridViewCancelEditEventArgs e){}受保护的无效 GridView1_RowUpdating(对象发送者,GridViewUpdateEventArgs e){}#endregion}}

解决方案

for question #1,try

 protected void Page_Load(object sender, EventArgs e){如果(!Page.IsPostBack){GridView1.DataSource = Course.GetCourses();GridView1.DataBind();}}

对于问题#2,我们需要检查您的方法 Course.Update(item) .

I am continuing from this post.

After much Googling, I have come up with this code to edit cells programmatically:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Ice_Web_Portal.BO;

namespace GridView___Test
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            GridView1.DataSource = Course.GetCourses();
            GridView1.DataBind();
        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridViewRow row = GridView1.Rows[e.NewEditIndex];

            GridView1.EditIndex = e.NewEditIndex;

            GridView1.DataSource = Course.GetCourses();
            GridView1.DataBind();
        }

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            TextBox txtID = (TextBox)GridView1.Rows[e.RowIndex].Cells[1].Controls[0];
            TextBox txtCourseCode = (TextBox)GridView1.Rows[e.RowIndex].Cells[2].Controls[0];
            TextBox txtCourseName = (TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0];
            TextBox txtCourseTextBookCode = (TextBox)GridView1.Rows[e.RowIndex].Cells[4].Controls[0];

            Course item = new Course();
            item.ID = Convert.ToInt32(txtID.Text);
            item.CourseCode = txtCourseCode.Text;
            item.CourseName = txtCourseName.Text;
            item.TextBookCode = txtCourseTextBookCode.Text;

            bool success = Course.Update(item);

            labMessage.Text = success.ToString();

            GridView1.EditIndex = -1;
            GridView1.DataSource = Course.GetCourses();
            GridView1.DataBind();
        }
    }
}

But 2 problems are happening.

(1) I need to press command buttons twice to Edit/Update.

(2) Changes in the cell values are not updated in the database. I.e. edited cell values are not committing.

Can anyone give me a solution?

UPDATE: My solution was like this:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GridView___Test._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>

<body>
    <form id="form1" runat="server">
    <div>

        <asp:GridView ID="GridView1" runat="server" Font-Names="Verdana" Font-Size="Small" AutoGenerateColumns="False" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowCommand="GridView1_RowCommand" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">            
        </asp:GridView>

    </div>
    </form>
</body>

</html>

namespace GridView___Test
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //if (!Page.IsPostBack)
            {
                CreateGridView();
            }
        }

        private void CreateGridView()
        {
            GridView1.Columns.Clear();

            DataTable dataTable = Book.GetBooksDataSet().Tables[0];

            CommandField cf = new CommandField();
            cf.ShowEditButton = true;

            GridView1.Columns.Add(cf);

            int colCount = 1;
            foreach (DataColumn c in dataTable.Columns)
            {
                BoundField boundField = new BoundField();

                boundField.DataField = c.ColumnName;
                boundField.HeaderText = c.ColumnName;
                //boundField.FooterText = "---";

                if (colCount == 3 || colCount == 5)
                {
                    boundField.ReadOnly = true;
                }

                GridView1.Columns.Add(boundField);
                colCount++;
            }

            GridView1.ShowFooter = true;

            GridView1.DataSource = dataTable;
            GridView1.DataBind();

            GridViewRow footerRow = GridView1.FooterRow;
            Button b = new Button();
            b.Text = "Add New";
            int i = 0;
            footerRow.Cells[i].Controls.Add(b);
            foreach (DataColumn c in dataTable.Columns)
            {
                ++i;
                TextBox tb = new TextBox();
                footerRow.Cells[i].Controls.Add(tb);
            }
        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int index = Convert.ToInt32(e.CommandArgument);

            if (e.CommandName == "Edit")
            {
                //Takes the GridView to Edit mode.
                GridView1.EditIndex = index;

                GridViewRow selectedRow = ((GridView)e.CommandSource).Rows[index];

                //We can get cell data like this
                string id = selectedRow.Cells[1].Text;
                string isbn = selectedRow.Cells[2].Text;

                //This is necessary to GridView to be showed up.
                CreateGridView();
            }
            else if (e.CommandName == "Update")
            {
                LinkButton updateButton = (LinkButton)e.CommandSource;

                DataControlFieldCell dcfc = (DataControlFieldCell)updateButton.Parent;

                GridViewRow gvr = (GridViewRow)dcfc.Parent;

                //The update...................
                //Update grid-data to database
                UpdateDataInTheDatabase(gvr.Cells[1].Controls);                

                //Grid goes back to normal
                GridView1.EditIndex = -1;

                //This is necessary to GridView to be showed up.
                CreateGridView();
            }
        }

        private void UpdateDataInTheDatabase(ControlCollection cc)
        {
            TextBox tb = (TextBox)cc[0];
            //...
            //...
            //...

            //Call the update persistance code here...
        }

        #region Application Satisfactory Event Handlers
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
        }

        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
        }

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
        }
        #endregion
    }
}

解决方案

for problem #1,try

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
        GridView1.DataSource = Course.GetCourses();
        GridView1.DataBind();
        }
    }

for problem #2, we need to check your method Course.Update(item) .

这篇关于ASP.NET - 以编程方式使用 GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆