如何在gridview中做修改
我有一个编辑职工信息页面,在这个页面中有一个gridview,在gridview中我希望当我点击修改时,相应行的信息全部都是可以编辑的,修改玩后,数据库中的信息也要得到更...
我有一个编辑职工信息页面,在这个页面中有一个gridview,在gridview中我希望当我点击修改时,相应行的信息全部都是可以编辑的,修改玩后,数据库中的信息也要得到更新,我该如何做,请各位给出详细代码,非常感谢!
展开
展开全部
在WEB程序的ASP页面中,都不建议使用该方法进行对数据的操作!为什么呢?那为什么现在极大多网站都没有采用你这种方式来进行数据操作呢?是别人没有想到?还是担心这样操作会对页面造成额外的开销?提主,你有想过这个问题吗?
我是见过有grid的网站中,是没有一个像你这样操作页面。通常都是获取当中一行的ID或可以获得对应数据的字段,再去查询一下数据库,再将数据返回到一个Table中对应的控件!
下面是一个简单的GRIDVIEW代码:
页面代码:
<div>
<asp:GridView ID="gvTest" runat="server">
<Columns>
<asp:BoundField DataField="customerID" Visible="False" />
<asp:BoundField DataField="customerName" HeaderText="名称" />
<asp:BoundField DataField="customerSex" HeaderText="性别" />
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<asp:LinkButton ID="lbtnUpdate" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"customerID") %>'
runat="server" Text="Update" OnClick="lbtnUpdate_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<br />
<div>
<table align="center">
<tr>
<td>
名称:</td>
<td>
<asp:TextBox ID="txtCustName" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>
性别:</td>
<td>
<asp:TextBox ID="txtCustSex" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnUpdate" runat="server" Text="修改" Visible="false" OnClick="btnUpdate_Click" />
<asp:Button ID="btnCancel" runat="server" Text="取消" Visible="false" OnClick="btnCancel_Click" />
</td>
</tr>
</table>
</div>
<input type="hidden" id="txtCustID" runat="server" />
如下为后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
//绑定Grid
private void BindGrid()
{
string strCmd = "select * from CUSTOMERS";
//getDataSet函数通过一个SQL语句取得一个DataSet
DataSet ds = getDataSet(strCmd);
gvTest.DataSource = ds;
gvTest.DataBind();
}
//LinkButton事件,得到相关客户信息
protected void lbtnUpdate_Click(object sender, EventArgs e)
{
LinkButton lbtnTemp = sender as LinkButton;
//取得保存在LinkButton的CommandArgument的ID值.
string custID = lbtnTemp.CommandArgument;
txtCustID.Value = custID;
string strCmd = string.Format("select * from CUSTOMERS where customerID = {0}", custID);
DataSet ds = getDataSet(strCmd);
//通过ID查询出来的客户信息赋给对应的控件
txtCustName.Text = ds.Tables[0].Rows[0]["customerName"].ToString();
txtCustSex.Text = ds.Tables[0].Rows[0]["customerSex"].ToString();
//打开修改和取消按钮
btnCancel.Visible = true;
btnUpdate.Visible = true;
}
//修改
protected void btnUpdate_Click(object sender, EventArgs e)
{
string strCmd = "update CUSTOMERS set customerName='{0}',customerSex='{1}' where customerID={2}";
strCmd = string.Format(strCmd, txtCustName.Text, txtCustSex.Text, txtCustID.Value);
//ExecuteNon为执行修改的函数
int count = ExecuteNon(strCmd);
//屏蔽两个按钮
btnCancel.Visible = false;
btnUpdate.Visible = false;
}
//取消
protected void btnCancel_Click(object sender, EventArgs e)
{
//清空或还原Table中的控件
txtCustName.Text = "";
txtCustSex.Text = "";
btnCancel.Visible = false;
btnUpdate.Visible = false;
}
注:
上面代码中我没有写连接或Command什么的,我觉得你会这些了.再加上上面的代码只是带给你一种意识,供你参考!事例写得好潦草,只供参考,不推荐使用这样的编码方式!
告一段落~谢谢~~
我是见过有grid的网站中,是没有一个像你这样操作页面。通常都是获取当中一行的ID或可以获得对应数据的字段,再去查询一下数据库,再将数据返回到一个Table中对应的控件!
下面是一个简单的GRIDVIEW代码:
页面代码:
<div>
<asp:GridView ID="gvTest" runat="server">
<Columns>
<asp:BoundField DataField="customerID" Visible="False" />
<asp:BoundField DataField="customerName" HeaderText="名称" />
<asp:BoundField DataField="customerSex" HeaderText="性别" />
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<asp:LinkButton ID="lbtnUpdate" CommandArgument='<%# DataBinder.Eval(Container.DataItem,"customerID") %>'
runat="server" Text="Update" OnClick="lbtnUpdate_Click"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<br />
<div>
<table align="center">
<tr>
<td>
名称:</td>
<td>
<asp:TextBox ID="txtCustName" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>
性别:</td>
<td>
<asp:TextBox ID="txtCustSex" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btnUpdate" runat="server" Text="修改" Visible="false" OnClick="btnUpdate_Click" />
<asp:Button ID="btnCancel" runat="server" Text="取消" Visible="false" OnClick="btnCancel_Click" />
</td>
</tr>
</table>
</div>
<input type="hidden" id="txtCustID" runat="server" />
如下为后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
//绑定Grid
private void BindGrid()
{
string strCmd = "select * from CUSTOMERS";
//getDataSet函数通过一个SQL语句取得一个DataSet
DataSet ds = getDataSet(strCmd);
gvTest.DataSource = ds;
gvTest.DataBind();
}
//LinkButton事件,得到相关客户信息
protected void lbtnUpdate_Click(object sender, EventArgs e)
{
LinkButton lbtnTemp = sender as LinkButton;
//取得保存在LinkButton的CommandArgument的ID值.
string custID = lbtnTemp.CommandArgument;
txtCustID.Value = custID;
string strCmd = string.Format("select * from CUSTOMERS where customerID = {0}", custID);
DataSet ds = getDataSet(strCmd);
//通过ID查询出来的客户信息赋给对应的控件
txtCustName.Text = ds.Tables[0].Rows[0]["customerName"].ToString();
txtCustSex.Text = ds.Tables[0].Rows[0]["customerSex"].ToString();
//打开修改和取消按钮
btnCancel.Visible = true;
btnUpdate.Visible = true;
}
//修改
protected void btnUpdate_Click(object sender, EventArgs e)
{
string strCmd = "update CUSTOMERS set customerName='{0}',customerSex='{1}' where customerID={2}";
strCmd = string.Format(strCmd, txtCustName.Text, txtCustSex.Text, txtCustID.Value);
//ExecuteNon为执行修改的函数
int count = ExecuteNon(strCmd);
//屏蔽两个按钮
btnCancel.Visible = false;
btnUpdate.Visible = false;
}
//取消
protected void btnCancel_Click(object sender, EventArgs e)
{
//清空或还原Table中的控件
txtCustName.Text = "";
txtCustSex.Text = "";
btnCancel.Visible = false;
btnUpdate.Visible = false;
}
注:
上面代码中我没有写连接或Command什么的,我觉得你会这些了.再加上上面的代码只是带给你一种意识,供你参考!事例写得好潦草,只供参考,不推荐使用这样的编码方式!
告一段落~谢谢~~
展开全部
如果是gridview直接绑定数据源,本身就有删除,编辑功能啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我把我做的项目贴给你,和你是一样的功能
以下是前台
<asp:GridView ID="show_class" runat="server" AllowPaging="True" AutoGenerateColumns="False" Width="570px" OnRowEditing="show_class_RowEditing" OnPageIndexChanging="show_class_PageIndexChanging" OnRowCancelingEdit="show_class_RowCancelingEdit" BackColor="White" BorderColor="#FFC0C0" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal" OnRowDeleting="show_class_RowDeleting" DataKeyNames="pid">
<Columns>
<asp:BoundField HeaderText="ID" DataField="pid" />
<asp:BoundField HeaderText="类名" DataField="title" />
<asp:CommandField ShowEditButton="True" HeaderText="功能区" EditText="编 辑" />
<asp:CommandField ShowDeleteButton="True" HeaderText="功能区" CancelText="取 消" DeleteText="删 除" EditText="编 辑" UpdateText="更 新" />
</Columns>
<FooterStyle BackColor="White" ForeColor="#333333" />
<RowStyle BackColor="White" ForeColor="#333333" />
<PagerStyle BackColor="#FFC0C0" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#FFC0C0" Font-Bold="True" ForeColor="White" />
</asp:GridView>
后台是
protected void show_class_RowEditing(object sender, GridViewEditEventArgs e)
{
show_class.EditIndex = e.NewEditIndex;
n = "select * from class_jz";
using(SqlConnection mycon = DB.createSQL())
{
mycon.Open();
string mycmd = DataSetSQL;
SqlCommand cmd = new SqlCommand(n, mycon);
SqlDataAdapter myad = new SqlDataAdapter();
myad.SelectCommand = cmd;
DataSet myds = new DataSet();
myad.Fill(myds);
show_class.DataSource = myds.Tables[0].DefaultView;
show_class.DataBind();
}
}
编辑主要是引发行编辑事件,在此事件中写相应的程序,
show_class.EditIndex = e.NewEditIndex;的意思是当前你所请求编辑行的索引就是你点击这个按钮触发的行。
下面的意思是重新绑定数据,因为我之前是封装了一个静态类,所以在这里重新修改了,我可以让你看一下原始的,
在新建的类文件中CS文件(我之前建立了一个DB的类)
/// <summary>
/// DataSet数据
/// </summary>
/// <param name="DataSetSQL">输入的sql语句,无返回值</param>
/// <param name="MyGridView">GridView控件的名称</param>
/// <param name="i">绑定的表视图的第几个表</param>
public static void GetDataSet(string DataSetSQL,GridView MyGridView,int i)
{
using(SqlConnection mycon = DB.createSQL())
{
mycon.Open();
string mycmd = DataSetSQL;
SqlCommand cmd = new SqlCommand(mycmd, mycon);
SqlDataAdapter myad = new SqlDataAdapter();
myad.SelectCommand = cmd;
DataSet myds = new DataSet();
myad.Fill(myds);
MyGridView.DataSource = myds.Tables[i].DefaultView;
MyGridView.DataBind();
}
}
按道理应该是直接调用此静态方法
protected void show_class_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
show_class.PageIndex = e.NewPageIndex;
DB.GetDataSet(n, show_class, 0);
}
不知道你看不看得懂?这就是你想要的?
以下是前台
<asp:GridView ID="show_class" runat="server" AllowPaging="True" AutoGenerateColumns="False" Width="570px" OnRowEditing="show_class_RowEditing" OnPageIndexChanging="show_class_PageIndexChanging" OnRowCancelingEdit="show_class_RowCancelingEdit" BackColor="White" BorderColor="#FFC0C0" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal" OnRowDeleting="show_class_RowDeleting" DataKeyNames="pid">
<Columns>
<asp:BoundField HeaderText="ID" DataField="pid" />
<asp:BoundField HeaderText="类名" DataField="title" />
<asp:CommandField ShowEditButton="True" HeaderText="功能区" EditText="编 辑" />
<asp:CommandField ShowDeleteButton="True" HeaderText="功能区" CancelText="取 消" DeleteText="删 除" EditText="编 辑" UpdateText="更 新" />
</Columns>
<FooterStyle BackColor="White" ForeColor="#333333" />
<RowStyle BackColor="White" ForeColor="#333333" />
<PagerStyle BackColor="#FFC0C0" ForeColor="White" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#FFC0C0" Font-Bold="True" ForeColor="White" />
</asp:GridView>
后台是
protected void show_class_RowEditing(object sender, GridViewEditEventArgs e)
{
show_class.EditIndex = e.NewEditIndex;
n = "select * from class_jz";
using(SqlConnection mycon = DB.createSQL())
{
mycon.Open();
string mycmd = DataSetSQL;
SqlCommand cmd = new SqlCommand(n, mycon);
SqlDataAdapter myad = new SqlDataAdapter();
myad.SelectCommand = cmd;
DataSet myds = new DataSet();
myad.Fill(myds);
show_class.DataSource = myds.Tables[0].DefaultView;
show_class.DataBind();
}
}
编辑主要是引发行编辑事件,在此事件中写相应的程序,
show_class.EditIndex = e.NewEditIndex;的意思是当前你所请求编辑行的索引就是你点击这个按钮触发的行。
下面的意思是重新绑定数据,因为我之前是封装了一个静态类,所以在这里重新修改了,我可以让你看一下原始的,
在新建的类文件中CS文件(我之前建立了一个DB的类)
/// <summary>
/// DataSet数据
/// </summary>
/// <param name="DataSetSQL">输入的sql语句,无返回值</param>
/// <param name="MyGridView">GridView控件的名称</param>
/// <param name="i">绑定的表视图的第几个表</param>
public static void GetDataSet(string DataSetSQL,GridView MyGridView,int i)
{
using(SqlConnection mycon = DB.createSQL())
{
mycon.Open();
string mycmd = DataSetSQL;
SqlCommand cmd = new SqlCommand(mycmd, mycon);
SqlDataAdapter myad = new SqlDataAdapter();
myad.SelectCommand = cmd;
DataSet myds = new DataSet();
myad.Fill(myds);
MyGridView.DataSource = myds.Tables[i].DefaultView;
MyGridView.DataBind();
}
}
按道理应该是直接调用此静态方法
protected void show_class_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
show_class.PageIndex = e.NewPageIndex;
DB.GetDataSet(n, show_class, 0);
}
不知道你看不看得懂?这就是你想要的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是2005的话,直接按右键绑定数据源里把删除功能给勾上就能实现删除了,2003的话就得写代码了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是很简单吗?数据绑定时候数据源 启用高级 完了 请用编辑就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询