我们以SQL Server2000中自带的数据库Northwind中表Employees为例。
下面为能就地编辑的DataGrid控件:
Edit.aspx:
<asp:DataGrid Runat="server" CellPadding="2" CellSpacing="0" id="DataGrid1" Font-Name="Verdana"
Font-Size="x-small" AutoGenerateColumns="False" BorderColor="black" BorderStyle="Solid" BorderWidth="1px"
DataKeyField="EmployeeID">
<HeaderStyle BackColor="brown" />
<AlternatingItemStyle BackColor="palegoldenrod" />
<ItemStyle BackColor="beige"></ItemStyle>
<Columns>
<asp:BoundColumn DataField="EmployeeID" HeaderText="ID" ReadOnly="True">
<ItemStyle BackColor="lightblue" />
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="Employee Name">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"TitleOfCourtesy")+"<b>"+
DataBinder.Eval(Container.DataItem,"FirstName")+"</b>"+
DataBinder.Eval(Container.DataItem,"LastName")%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="title" HeaderText="Position" />
<asp:BoundColumn DataField="Country" HeaderText="From" />
<asp:EditCommandColumn CancelText="Cancel" EditText="Edit" UpdateText="Update" ButtonType="LinkButton">
</asp:EditCommandColumn>
</Columns>
</asp:DataGrid>
Edit.aspx.cs
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!Page.IsPostBack)
{
UpdateView();
}
}
private void UpdateView()
{
SqlConnection myconn=new SqlConnection("DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;");
string strsql="SELECT employeeid, titleofcourtesy, firstname, lastname, title, country FROM Employees";
SqlDataAdapter da=new SqlDataAdapter(strsql,myconn);
DataSet ds=new DataSet();
da.Fill(ds,"MyTable");
DataGrid1.DataSource=ds.Tables["MyTable"];
DataGrid1.DataBind();
}
private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=-1;
UpdateView();
}
private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex=e.Item.ItemIndex;
UpdateView();
}
private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
int iPostion=2;
int iFrom=3;
TextBox txtPostion=(TextBox)e.Item.Cells[iPostion].Controls[0];
TextBox txtFrom=(TextBox)e.Item.Cells[iFrom].Controls[0];
StringBuilder sb=new StringBuilder();
sb.Append("Update Employees set ");
sb.Append("Title=@Title,Country=@Country ");
sb.Append("where EmployeeID=@EmployeeID ");
SqlConnection myconn=new SqlConnection("DATABASE=Northwind;SERVER=localhost;UID=sa;PWD=;");
SqlCommand cmd=new SqlCommand(sb.ToString(),myconn);
SqlParameter p1=new SqlParameter("@EmployeeID",SqlDbType.Int);
p1.Direction=ParameterDirection.Input;
p1.Value=DataGrid1.DataKeys[e.Item.ItemIndex];
cmd.Parameters.Add(p1);
SqlParameter p2=new SqlParameter("@Title",SqlDbType.NVarChar,30);
p2.Direction=ParameterDirection.Input;
p2.Value=txtPostion.Text;
cmd.Parameters.Add(p2);
SqlParameter p3=new SqlParameter("@Country",SqlDbType.NVarChar,15);
p3.Direction=ParameterDirection.Input;
p3.Value=txtFrom.Text;
cmd.Parameters.Add(p3);
myconn.Open();
cmd.ExecuteNonQuery();
myconn.Close();
DataGrid1.EditItemIndex=-1;
UpdateView();
}
如果你想把界面搞得花俏一些的话,可以用图片来代替文字。