大虾请进:GridView取值老问题,解决不了!
我的代码如下:
public partial class _Default : System.Web.UI.Page
{
OleDbConnection conn = new OleDbConnection(ConfigurationSettings.AppSettings["conStr"] + System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["dbName"]));
DataSet ds = new DataSet();
public void dataBd()
{
OleDbDataAdapter da = new OleDbDataAdapter("select * from 信息表",conn);
conn.Open();
da.Fill(ds,"信息表");
conn.Close();
GridView1.DataSource = ds.Tables["信息表"];
GridView1.DataBind();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)//此处要与不要都试过,未果
{
dataBd();
}
}
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
string sqlStr = "update 信息表 set 姓名='" + GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
Button1.Text = sqlStr;
if (e.CommandName == "Edit")
{
GridView1.EditIndex = Convert.ToInt32(e.CommandArgument);
dataBd();
}
if (e.CommandName == "Update")
{
OleDbCommand comUd = new OleDbCommand(sqlStr, conn);
conn.Open();
comUd.ExecuteNonQuery();
conn.Close();
GridView1.EditIndex = -1;
dataBd();
}
}
}
总是将空值更新进数据库,每次都取不到值,已经困了我快一星期了,请指教!GridView我用自动绑定字段。
问题点数:100、回复次数:21Top
1 楼HJS1820(努力成為高手)回复于 2006-12-04 16:54:19 得分 2
幫頂
結帖時接點分...
只用過datagridTop
2 楼xiahouwen(武眉博<活靶子.NET>)回复于 2006-12-04 16:57:07 得分 3
断点 察看 GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text 什么值Top
3 楼widow(小吴)回复于 2006-12-04 17:07:08 得分 0
断点 察看 GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text
//////////////////////////////
我看了,退出编辑前是空值!请帮帮我!Top
4 楼widow(小吴)回复于 2006-12-04 17:10:19 得分 0
断点 察看 GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text
---------------------------------------------------------
点击编辑时取出的是原值,但点击更新时是空值!Top
5 楼xyh2002(凌)回复于 2006-12-04 17:27:22 得分 5
写到RowEditing事件里面试试是否可以,例如下面这样
protected void GridView1_RowEditing( object sender, GridViewEditEventArgs e )
{
int index = e.NewEditIndex;
GridViewRow row = GridView1.Rows[ index ];
string jobID = Server.HtmlDecode( row.Cells[ 3 ].Text );
}Top
6 楼widow(小吴)回复于 2006-12-04 18:15:25 得分 0
to xyh2002(凌)
还是取不出来,原来的单元格有值,不做任何改动,只要单击编辑,然后单击更新,值就没有了,看来问题肯定是sql语句的执行发生在页面刷新之后,页面一刷新,原来修改的值就没有了,于是sql就提交了空值到数据库。这到底怎样解决呢?Top
7 楼wlb854(不倒翁)回复于 2006-12-04 18:22:19 得分 3
if (!IsPostBack)
{
dataBd();
}
这可定要的Top
8 楼widow(小吴)回复于 2006-12-04 18:27:35 得分 0
to wlb854(不倒翁)
是过了,要与不要都不行。
各位大虾能不能在你们的机子上帮我调一下,我快要疯了!十分感激!Top
9 楼Snowdust(雪尘)回复于 2006-12-04 19:50:25 得分 78
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Edit")
{
GridView1.EditIndex = Convert.ToInt32(e.CommandArgument);
dataBd();
}
if (e.CommandName == "Update")
{
string sqlStr = "update 信息表 set 姓名='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();//问题出在这里
Button1.Text = sqlStr;
OleDbCommand comUd = new OleDbCommand(sqlStr, conn);
conn.Open();
comUd.ExecuteNonQuery();
conn.Close();
GridView1.EditIndex = -1;
dataBd();
}
}Top
10 楼charles_y(每天上网一小时)回复于 2006-12-04 19:54:20 得分 5
没用过gridview,帮不了你
不过把e.CommandArgument 都改成 e.RowIndex 看看呢
还有,似乎if (e.CommandName == "Edit")
{
GridView1.EditIndex = Convert.ToInt32(e.CommandArgument);
dataBd();
}
里面需要dataBd()吗?这不是把gridview还原了吗?
Top
11 楼wengnet(西门吹雪)回复于 2006-12-04 20:00:44 得分 2
你在EDIT模板里面绑定了吗,如果我猜的没有错,应该是没有。Top
12 楼widow(小吴)回复于 2006-12-04 20:13:58 得分 0
to charles_y(每天上网一小时)
在该事件中没有e.RowIndex,因为都是区当前行的位置,应该不影响;不用dataBd()绑定的话必须得点两次按钮才能激活编辑事件。
谢谢您能帮帮解答,请继续关注!
-----------------------------------------
to wengnet(西门吹雪)
我是选择自动填充字段的,这样会有影响吗?请明示!
Top
13 楼widow(小吴)回复于 2006-12-04 20:22:20 得分 0
按照Snowdust(雪尘)的提示代码,问题已经解决,我要用10分钟做一下多字段测试,10分钟后结贴。
Top
14 楼widow(小吴)回复于 2006-12-04 20:35:31 得分 0
to Snowdust(雪尘)
-----------------------
我将您的提示改为两个字段时(如下)
sqlStr = "update 信息表 set 姓名='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' and 学号='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text+"' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
--------------
就出现姓名字段更新为随机的0或-1,而不是我输入的值,这是怎么回事?请您继续帮我!
请各位大虾继续关注!Top
15 楼Snowdust(雪尘)回复于 2006-12-04 20:45:28 得分 0
sqlStr = "update 信息表 set 姓名='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "', 学号='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text+"' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
你的SQL语句有问题啊!!!!!!!!!!Top
16 楼shumark()回复于 2006-12-04 20:48:15 得分 2
不用自动绑定....手工加还好些...
想怎么滴就怎么滴~Top
17 楼widow(小吴)回复于 2006-12-04 20:54:00 得分 0
to Snowdust(雪尘):
对不起,刚才写错了,改正后还是老样子!以下是我的sql语句,为了排除中文影响,我把表名和字段改为拼音:
sqlStr = "update xxb set xh='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text + "' and xm='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
Top
18 楼widow(小吴)回复于 2006-12-04 20:56:25 得分 0
我用label显示了解析后的sql语句,是正确的,而且执行过程中也没有报错,可就是得不到预期结果Top
19 楼Snowdust(雪尘)回复于 2006-12-04 21:01:21 得分 0
那就怪了,我试下来没问题,你再看看是不是别的什么地方有问题。Top
20 楼widow(小吴)回复于 2006-12-04 21:05:21 得分 0
Snowdust(雪尘) ,非常感谢您,我在试一下,待会儿结帐!Top
21 楼widow(小吴)回复于 2006-12-04 21:22:27 得分 0
to everyone : 问题已解决
sql语句写错了,应该是
------------
string sqlStr = "update xxb set xh='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text + "' , xm='" + ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text + "' where ID=" + GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
------------
不知道为始末没报错!
感谢Snowdust(雪尘) 、感谢wengnet(西门吹雪),感谢所有参与的人!真希望有一天,我也能有一颗红星星!
------------
结帐!Top




