我用datagrid去更新user表,发现当我更新一个用户的信息时,datagrid中的数据,却将所有的用户数据更新,并且数据都改为一样的
.aspx文件
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="admin.aspx.cs" Inherits="admin" %>
<!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">
<div align="center">
<asp:DataGrid ID="DataGrid1" runat="server" AutoGenerateColumns="False" OnEditCommand="mygrid_edit"
OnCancelCommand="mygrid_cancel" OnUpdateCommand="mygrid_update">
<Columns>
<asp:EditCommandColumn
EditText="编辑"
UpdateText="修改"
HeaderText="修改"
CancelText="删除"
>
<ItemStyle Wrap="False">
</ItemStyle>
<HeaderStyle Wrap="False">
</HeaderStyle>
</asp:EditCommandColumn>
<asp:BoundColumn HeaderText="用户类型"
ReadOnly="True"
DataField="usertype"
ItemStyle-HorizontalAlign="Center"
/>
<asp:BoundColumn HeaderText="用户名"
DataField="username"
/>
<asp:BoundColumn HeaderText="真实姓名"
DataField="name"
/>
<asp:BoundColumn HeaderText="密码"
DataField="pwd"
/>
<asp:BoundColumn HeaderText="电子邮箱"
DataField="email"
/>
</Columns>
</asp:DataGrid></div>
</form>
</body>
</html>
.aspx.cs文件
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 System.Data.SqlClient;
public partial class admin : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Binding();
}
}
public void mygrid_edit(object sender, DataGridCommandEventArgs e)
{
//SqlConnection con = connection.connect();
//DataSet ds = new DataSet();
DataGrid1.EditItemIndex = (int)e.Item.ItemIndex;
Binding();
}
public void mygrid_update(object sender, DataGridCommandEventArgs e)
{
SqlConnection con = connection.connect();
// DataSet ds = new DataSet();
string strupdate = "update users set username=@Lusername,name=@Fname,pwd=@pwd,email=@email ";
SqlCommand cmd = new SqlCommand(strupdate, con);
cmd.Parameters.Add(new SqlParameter("@Lusername", SqlDbType.NVarChar, 50));
cmd.Parameters.Add(new SqlParameter("@Fname", SqlDbType.VarChar, 50));
cmd.Parameters.Add(new SqlParameter("@pwd", SqlDbType.NVarChar, 50));
cmd.Parameters.Add(new SqlParameter("@email", SqlDbType.NVarChar, 50));
// cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.VarChar, 10));
string[] stritem ={ "@Lusername", "@Fname", "@pwd", "@email" };
// int currentid = DataGrid1.EditItemIndex;
// if (DataGrid1.EditItemIndex == currentid)
for (int i = 1; i < e.Item.Cells.Count - 1; i++)
{
TextBox currenttextbox;
currenttextbox = (TextBox)e.Item.Cells[i + 1].Controls[0];
string colvalue;
colvalue = currenttextbox.Text.Trim();
cmd.Parameters[stritem[i - 1]].Value = colvalue;
}
// cmd.Parameters["@id"].Value = Session["userid"].ToString();
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
DataGrid1.EditItemIndex = -1;
cmd.Connection.Close();
Binding();
}
public void mygrid_cancel(object sender, DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = -1;
Binding();
}
void Binding()
{
//userid = Session["userid"].ToString();
SqlConnection con = connection.connect();
con.Open();
DataSet ds = new DataSet();
SqlDataAdapter mydataadapt = new SqlDataAdapter("select * from users ", con);
mydataadapt.Fill(ds, "users");
DataGrid1.DataSource = ds.Tables["users"].DefaultView;
DataGrid1.DataBind();
}
}
问题点数:22、回复次数:4Top
1 楼amandag(高歌)回复于 2006-06-04 16:32:05 得分 12
//update语句没加where条件,当然是更新表中所有记录了
string strupdate = "update users set username=@Lusername,name=@Fname,pwd=@pwd,email=@email ";Top
2 楼aspdotnet2005(天中之子、为中原喝采![我想找兼职MSN:Red-Maple@hotmail.com])回复于 2006-06-04 16:55:12 得分 10
update加个where 条件,比如ID或者用户名什么呢,程序怎么知道你要更新哪个记录Top
3 楼ylgandxq()回复于 2006-06-04 17:40:55 得分 0
后来我加了where userid='"+(e.Item.Itemindex+1)+"'
但是他总是提示
for (int i =0 ; i < e.Item.Cells.Count - 1; i++)
{
TextBox currenttextbox;
currenttextbox = (TextBox)e.Item.Cells[i + 1].Controls[0];
指定的参数已超出有效值的范围。参数名: index
string colvalue;
colvalue = currenttextbox.Text.Trim();
cmd.Parameters[stritem[i - 1]].Value = colvalue;
}
Top
4 楼ylgandxq()回复于 2006-06-04 18:07:04 得分 0
谢谢大家了,这个问题我经解决了,原是我在做for循环的时候下标不正确!Top




