关于DataGrid里对数据增删改问题!;

windowszhm 2005-04-30 04:08:20
我的目的:通过传入数据库和表,把数据库中的表的数据显示在DataGrid上,并能直接在DataGrid 上进行增加,删除,修改操作!(假设数据库中只有一个单表)

下面是我自己编写的用户控件:不过有大问题,通过指定数据库和表后,只能在DataGrid上显示,不能进行增加,删除,修改操作。(个人感觉就是:增删修操作的SQL语句不好写)



//WebForm1.aspx.cs的代码
//它使用后面的控件

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;

namespace webkj
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected WebUserControl1 ucBook ;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
ucBook.DBName = "bookdb";
ucBook.SQLCmd = "select * from book ";
ucBook.TabName = "book";
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}


//用户控件 WebUserControl1.ascx.cs 的代码
namespace webkj
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// WebUserControl1 的摘要说明。
/// </summary>
public abstract class WebUserControl1 : System.Web.UI.UserControl
{

public string DBName;//数据库
public string SQLCmd;//查询
public string TabName;//表
//public string key = null;

protected System.Web.UI.WebControls.Label lblTitle;
public DataTable dt = null;
public DataSet ds = null;
public SqlDataAdapter myDataAdapter=null;
public SqlCommandBuilder objAutoGen = null;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
public bool shouldRebind = false;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (Page != null)
{
string connstr = "Server=(local);Integrated

Security=SSPI;database="+DBName;
ds = new DataSet();
SqlConnection conn = new SqlConnection(connstr);
myDataAdapter =new SqlDataAdapter(SQLCmd,conn);
objAutoGen = new SqlCommandBuilder(myDataAdapter);
myDataAdapter.MissingSchemaAction =

MissingSchemaAction.AddWithKey;
myDataAdapter.Fill(ds,TabName);

if (TabName != String.Empty)
dt = ds.Tables[TabName];
else
dt = ds.Tables[0];

}

if (!Page.IsPostBack)
{
shouldRebind = true;
BindDataGrid();
}
//this.DataGrid1.DataKeyField = dt.Columns[0];

//this.TextBox1.Text = key.ToString();
}

//绑定DataGrid
private void BindDataGrid()
{
if (shouldRebind)
{
this.DataGrid1.DataSource = dt;
this.DataGrid1.DataBind();
}
}

//保存操作
public void SaveData()
{
myDataAdapter.Update(ds,TabName);

}


#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// 设计器支持所需的方法 - 不要使用
/// 代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.CancelCommand += new

System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
this.DataGrid1.EditCommand += new

System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
this.DataGrid1.DeleteCommand += new

System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion



//DataGrid里用“属性生成器”建的 “编辑”按钮。
private void DataGrid1_EditCommand(object source,

System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex =(int)e.Item.ItemIndex;
shouldRebind = true;
}

//DataGrid里用“属性生成器”建的 “取消”按钮。
private void DataGrid1_CancelCommand(object source,

System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex = -1;
shouldRebind = true;
}

//DataGrid里用“属性生成器”建的 “删除”按钮。
private void DataGrid1_DeleteCommand(object source,

System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
/*

// 删除引发命令的行
dt.Rows.RemoveAt(e.Item.DataSetIndex);

// 保存更新的数据
Console.WriteLine("Delete: "+objAutoGen.GetDeleteCommand().CommandText);
SaveData();

this.DataGrid1.EditItemIndex = -1;
shouldRebind = true;

*/
//int number =(int)DataGrid1.DataKeys[e.Item.ItemIndex];
//string str= DataGrid1.DataKeyField ;

//dt.Rows.RemoveAt((int)e.Item.DataSetIndex);
//怎么找到 关键字段 ->DataGrid里的关键值 -》执行SQL删除

string str = DataGrid1.DataKeys[(int)e.Item.ItemIndex].ToString();
string delCmd = "delete from "+TabName+"where"+key+"="+str;
string connstr = "Server=(local);Integrated
Security=SSPI;database="+DBName;
//ds = new DataSet();
SqlConnection conn = new SqlConnection(connstr);
//myDataAdapter =new SqlDataAdapter(SQLCmd,conn);
conn.Open();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandText = delCmd;
sqlCmd.Connection = conn;
sqlCmd.ExecuteNonQuery();

/*
conn.Close();
SaveData();
DataGrid1.EditItemIndex = -1;
shouldRebind = true;
*/
}


}
}

















...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
windowszhm 2005-05-12
  • 打赏
  • 举报
回复
在线等高手指点!
lcj_abc 2005-05-12
  • 打赏
  • 举报
回复
学习
windowszhm 2005-05-08
  • 打赏
  • 举报
回复
server_me(编程浪子):
其中的 opt 是什么?
Runningboy007 2005-05-08
  • 打赏
  • 举报
回复
绑定 更新都做了吗
wonderful_wwp 2005-05-08
  • 打赏
  • 举报
回复
受益,THANKS。
singlepine 2005-04-30
  • 打赏
  • 举报
回复
如果删除出错,可能是你没有设置datakeyfield,
比如
<asp:datagrid id="UserManage" runat="server" AutoGenerateColumns="False"
OnCancelCommand="UserManage_CancelCommand"
OnEditCommand="UserManage_EditCommand"
OnUpdateCommand = "UserManage_UpdateCommand"
DataKeyField="UserID">//在这里设置datagrid的唯一字段,估计就可以删除了,试试
singlepine 2005-04-30
  • 打赏
  • 举报
回复
1.你少一个事件this.DataGrid1.UpdateCommand += new
System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);//更新事件要在这里写,比如
private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
try
{
string Line = "";
string Istemp = "";
int ID = 0;
if(Page.IsValid)
{
ID = int.Parse(DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
Line = ((System.Web.UI.WebControls.TextBox)e.Item.Cells[1].Controls[0]).Text;
Istemp = ((System.Web.UI.WebControls.TextBox)e.Item.Cells[2].Controls[0]).Text;
}
opt.Operatedata("update Lines set Line='"+ Line + "',Istemp='"+Istemp+"' where ID=" + ID);
DataGrid1.EditItemIndex = -1;
BindGrid();
}
catch(Exception UPC)
{
Response.Write(UPC.ToString());
}
}
2.删除语句似乎没什么不对之处
server_me 2005-04-30
  • 打赏
  • 举报
回复
给你一个绝对好用的。DateGrid的使用全了。

private void Page_Load(object sender, System.EventArgs e)
{
first.Text="最首页";
prev.Text="上一页";
next.Text="下一页";
last.Text="最后页";
if(!IsPostBack)
{
BindGrid();
}
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.Page_Changed);
this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
this.DataGrid1.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.DataGrid1_SortCommand);
this.DataGrid1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.first.Click += new System.EventHandler(this.btnClick);
this.prev.Click += new System.EventHandler(this.btnClick);
this.next.Click += new System.EventHandler(this.btnClick);
this.last.Click += new System.EventHandler(this.btnClick);
this.go.Click += new System.EventHandler(this.goClick);
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

void Page_Changed(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex=e.NewPageIndex;
BindGrid();
}
void BindGrid()
{

DataGrid1.DataSource=opt.BindData("select * from Lines order by id","Lines");
DataGrid1.DataBind();
showstate();
}
void showstate()
{
DataTable dt=opt.BindData("select * from Lines order by id","Lines");
int count=dt.Rows.Count;
lblallcount.Text=count.ToString();
lblpagecount.Text=DataGrid1.PageCount.ToString();
lblcurrentindex.Text=(DataGrid1.CurrentPageIndex+1).ToString();
}
void btnClick(object sender,System.EventArgs e)
{
string arg=((LinkButton)sender).CommandArgument;
switch(arg)
{
case ("first"):
DataGrid1.CurrentPageIndex=0;
break;
case ("prev"):
if(DataGrid1.CurrentPageIndex>0)
DataGrid1.CurrentPageIndex--;
break;
case ("next"):
if(DataGrid1.CurrentPageIndex<(DataGrid1.PageCount-1))
DataGrid1.CurrentPageIndex++;
break;
case ("last"):
DataGrid1.CurrentPageIndex=DataGrid1.PageCount-1;
break;
default:
DataGrid1.CurrentPageIndex=Convert.ToInt32(arg);
break;
}
BindGrid();
}
private void goClick(object sender, System.EventArgs e)
{
if(to.Text.Trim()!="")
{
int index=Int32.Parse(to.Text.Trim())-1;
if(index>=0&&index<DataGrid1.PageCount)
{
DataGrid1.CurrentPageIndex=index;
}
}
BindGrid();
}

private void Button1_Click(object sender, System.EventArgs e)
{
this.Response.Write("<script language=\"javascript\">window.open(\"LineAddL.aspx\", \"\" , \"toolbar=no , location=no , directories=no , status=no , menubar=no , scrollbars=no , resizeable=no , width=250 , height=70 , top=10 , left=10\");</script>");

}

private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=e.Item.ItemIndex;
BindGrid();
}

private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=-1;
BindGrid();
}

private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=-1;
int ID = int.Parse(DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
opt.Operatedata("delete from Lines where ID=" + ID);
BindGrid();

}

private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
string SortField = (string)e.SortExpression;
BindGrid();
}

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
try
{
string Line = "";
string Istemp = "";
int ID = 0;
if(Page.IsValid)
{
ID = int.Parse(DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
Line = ((System.Web.UI.WebControls.TextBox)e.Item.Cells[1].Controls[0]).Text;
Istemp = ((System.Web.UI.WebControls.TextBox)e.Item.Cells[2].Controls[0]).Text;
}

opt.Operatedata("update Lines set Line='"+ Line + "',Istemp='"+Istemp+"' where ID=" + ID);

DataGrid1.EditItemIndex = -1;
BindGrid();
}
catch(Exception UPC)
{
Response.Write(UPC.ToString());
}
}
zr1982930 2005-04-30
  • 打赏
  • 举报
回复
帮顶!
luz331 2005-04-30
  • 打赏
  • 举报
回复
代码太长了,看不下去。
但你说的DataGrid对数据增删改是可以的,不用自己写控件

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧