下面的C#代码使用了gridview控件,为什么单击编辑数据要 单击两次,为什么单击更新数据之后页面任然处于编

下面的C#代码使用了gridview控件,为什么单击编辑数据要单击两次,为什么单击更新数据之后页面任然处于编辑状态。(数据处理函数mysqlclassEmpPurse=n... 下面的C#代码使用了gridview控件,为什么单击编辑数据要

单击两次,为什么单击更新数据之后页面任然处于编辑状态

。(数据处理函数mysqlclass EmpPurse = new

mysqlclass(tablename)以及他的方法经过各种测试是没有

问题的。其中GetTable方法是获取你想要的表,返回一个数

据集,SetTable方法是更新数据库里面的数据,返回收影响

的行数)
源码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;

public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender,

EventArgs e)
{

if (!IsPostBack)
{
string tablename = "EmpPurse1";
DataSet data = new DataSet();
mysqlclass EmpPurse = new mysqlclass

(tablename);
data = EmpPurse.GetTable();
GridView1.DataSource = data.Tables

["t1"];
GridView1.DataBind();
}

}
protected void GridView1_RowUpdating(object

sender, GridViewUpdateEventArgs e)
{
ArrayList listname = new ArrayList();
int countcoln = 0;

string tablename = "EmpPurse1";
DataSet data = new DataSet();
mysqlclass EmpPurse = new mysqlclass

(tablename);
data = EmpPurse.GetTable();

foreach (DataColumn col in data.Tables

["t1"].Columns)
{
if (col.ColumnName.ToString() != "ID")
{
listname.Add

(col.ColumnName.ToString());
countcoln++;
}
}
Response.Write("countcoln" + countcoln);

mysqlclass upsql = new mysqlclass

("EmpPurse1");
int i;
string sqlif="ID=5";
ArrayList listvalue=new ArrayList();
for(int n=0;n<countcoln;n++)
{
listvalue.Add(e.NewValues[n].ToString

());
}

Response.Write("#");
Response.Write("##countcoln"+countcoln);

i=upsql.SetTable(listname,listvalue,sqlif);

Response.Write("受影响的行数"+i);
GridView1.EditIndex = -1;

}
protected void GridView1_RowCancelingEdit

(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;

}
protected void GridView1_RowUpdated(object

sender, GridViewUpdatedEventArgs e)
{
GridView1.EditIndex = -1;
}

protected void GridView1_RowEditing(object

sender, GridViewEditEventArgs e)
{
}
}

希望好心人能帮我看看,1.如何让我单击编辑按钮时,文本

框里面有数据,而不是想图中那样,单击编辑后什么都要自

己重新写入(主要是想知道在gridview的那个事件中写代码

)2.为什么在页面上要单击编辑两次后才能进入编辑状态。

3.为什么编辑后单击更新,虽然处理了数据,但页面还是处

于编辑状态。

一定请看了图片后再回答,这里的问题很明显。如能解决,

万分感谢。
附上页面源码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" DataKeyNames="ID"
onrowcancelingedit="GridView1_RowCancelingEdit"
onrowediting="GridView1_RowEditing" onrowupdated="GridView1_RowUpdated"
onrowupdating="GridView1_RowUpdating">
</asp:GridView>
</form>
</body>
</html>
展开
 我来答
百度网友e1644bd
2012-04-05 · TA获得超过573个赞
知道小有建树答主
回答量:409
采纳率:50%
帮助的人:80.7万
展开全部
我不当好人;只求你的分数;
1.如何让我单击编辑按钮时,文本框里面有数据,而不是想图中那样,单击编辑 后什么都要自己重新写入(主要是想知道在gridview的那个事件中写代码)
答:要想某行点击编辑之后文本框默认出现数据,必须在GirdView添加行绑定模板如:
<columns <asp:TemplateColumn >
<EditItemTemplate >
<asp:TextBox ID="txtName" runat ="server" Text ='<%#Eval("字段名称") % >'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>></columns>
而不是就一个单纯的GridView
2.为什么在页面上要单击编辑两次后才能进入编辑状态。
你使用了 AutoGenerateEditButton="True" 自带的编辑按钮,它的机制是相当于一个服务器控件,要起到回发的作用,解决的办法就是在isposback底下写上你的代码 或者你不要用AutoGenerateEditButton="True" 直接在gridview里面有一个编辑行的事件底下写代码也可以;不会出现点两次
具体代码:
GridView1.EditItemIndex = e.newindex; //此处e.newindex 这个e.后面是需要的行索引,具体单词忘记写了,你可以点出来看得到跟new有关的一个单词
string tablename = "EmpPurse1";
DataSet data = new DataSet();
mysqlclass EmpPurse = new mysqlclass

(tablename);
data = EmpPurse.GetTable();
GridView1.DataSource = data.Tables

["t1"];
GridView1.DataBind();

3.为什么编辑后单击更新,虽然处理了数据,但页面还是处于编辑状态。
你在最后写完更新代码之后也要加上
GridView1.EditIndex = -1;
string tablename = "EmpPurse1";
DataSet data = new DataSet();
mysqlclass EmpPurse = new mysqlclass

(tablename);
data = EmpPurse.GetTable();
GridView1.DataSource = data.Tables

["t1"];
GridView1.DataBind();

祝你成功!
追问
1.如何让我单击编辑按钮时,文本框里面有数据,而不是想图中那样,单击编辑 后什么都要自己重新写入:这里你说的是已经知道字段名的方法吧?我希望设定字段名为数据源字段名。就是说。我现在只知道数据库中的一个表的名字,要绑定到gridview中。所及具体哪个字段我是不知道的,只是在查询后自动依次绑定。这个怎么绑定呢?
2..我在 GridView1_RowUpdating里面执行的数据更新方法。在末尾已经有了GridView1.EditIndex = -1;?
追答
1,如果你要点击编辑之后要出现数据的话,就得加个绑定模版;因为你想过没有更新的时候,你得具体拿出更新的某个值,你不加的话你怎么取出它更新的值?还有你要实现这种效果还得把显示行模版的值放到编辑模版上,这是一件很复杂的事情;你既然可以绑定出来数据,就一定知道表中具体的字段;
2,你虽然最后加了GridView1.EditIndex = -1;但是你没有重新绑定一次
string tablename = "EmpPurse1";
DataSet data = new DataSet();
mysqlclass EmpPurse = new mysqlclass

(tablename);
data = EmpPurse.GetTable();
GridView1.DataSource = data.Tables

["t1"];
GridView1.DataBind();
等于教你怎么用这个控件了
丿灬丨狼丶舞丨
2012-04-04 · 超过44用户采纳过TA的回答
知道答主
回答量:126
采纳率:0%
帮助的人:136万
展开全部
你最好能把你的整个程序发过来,然后方便调试,我还可以在自己的客户端上运行下,看是哪里问题。个人简介有我Q,加我。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Tim·li9d0ccc
2012-04-07 · TA获得超过215个赞
知道答主
回答量:66
采纳率:0%
帮助的人:75.9万
展开全部
在editing和updating里面重新bind()一下就行了
GridView1.DataSource = data.Tables

["t1"];
GridView1.DataBind();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式