当愚蠢的方式奏效的时候,它就不是愚蠢的。——《美国士兵手册》
 
作者前言:
在动态网页(我是指服务器脚本编程)纯手工年代,工作量是大,但控制起来非常精确,我称之为手术刀式编程。而今,在利润支配技术的年代,一夜之间“软件复用”“框架”“平台”“面向XX”雨后春笋……我并不反对城市扩张占用农田,也并不支持为了保护野生动物而放弃现代文明,我只是不想发生这样一幕:当一名程序员苦于实现一个功能的时候,怪罪于微软没有提供相应的控件,或者归咎于网上没有人贴出源代码。要知道,世界上最贵的奢侈品大多是纯手工制作。
 
这里是一个页面的codebehind代码,献丑了:
 
在线编辑.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;
public partial class GridView_在线编辑 : System.Web.UI.Page
{
    /// <summary>
    /// 构建数据源
    /// 请根据自己的情况修改
    /// </summary>
    /// <returns></returns>
    private DataTable InitTable()
    {
        DataTable dt = new DataTable("testtable");
        DataColumn dc = new DataColumn("ID", typeof(String));
        dt.Columns.Add(dc);
        dc = new DataColumn("Sex", typeof(String));
        dt.Columns.Add(dc);
        DataRow dr = dt.NewRow();
        dr["ID"] = "001";
        dr["Sex"] = "0";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["ID"] = "002";
        dr["Sex"] = "0";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["ID"] = "003";
        dr["Sex"] = "0";
        dt.Rows.Add(dr);
        dr = dt.NewRow();
        dr["ID"] = "004";
        dr["Sex"] = "0";
        dt.Rows.Add(dr);
        return dt;
    }
    /// <summary>
    /// 数据绑定
    /// </summary>
    private void BindDataa()
    {
        GridView1.DataSource = InitTable();
        GridView1.DataBind();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            GridView1.DataSource = InitTable();
            GridView1.DataBind();
        }
    }
    /// <summary>
    /// 编辑按钮按下时
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btEdit_Click(object sender, EventArgs e)
    {
        Button rowbutton = sender as Button;
        GridView1.EditIndex = Convert.ToInt32(rowbutton.CommandArgument);
        BindDataa();
    }
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (e.Row.RowIndex != GridView1.EditIndex)
            {
               
                Button edit = e.Row.FindControl("btEdit") as Button;
                edit.CommandArgument = e.Row.RowIndex.ToString();
            }
            else
            {
                DataRowView drv = e.Row.DataItem as DataRowView;
                RadioButtonList sex = e.Row.FindControl("RadioButtonList1") as RadioButtonList;
                sex.SelectedValue = drv["Sex"].ToString();
            }
        }
    }
    /// <summary>
    /// 取消按钮按下时
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btCancel_Click(object sender, EventArgs e)
    {
        GridView1.EditIndex = -1;
        BindDataa();
    }
    /// <summary>
    /// 确定按钮按下时
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btOK_Click(object sender, EventArgs e)
    {
        //主键获取,GridView普通用法,在此不赘述
        string key = GridView1.DataKeys[GridView1.EditIndex].Value.ToString();
        //获取用户输入
        GridViewRow gvr = GridView1.Rows[GridView1.EditIndex];
        TextBox userID = gvr.FindControl("tbID") as TextBox;
        string id = userID.Text;
        RadioButtonList userSex = gvr.FindControl("RadioButtonList1") as RadioButtonList;
        string sex = userSex.SelectedValue;
        //====在这里做你想要做的事情,比如更新数据库什么的======
        //恢复到浏览状态
        GridView1.EditIndex = -1;
        BindDataa();
    }
}
 
在线编辑.aspx
 
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound" DataKeyNames="id">
            <Columns>
                <asp:TemplateField HeaderText="Operation">
                    <EditItemTemplate>
                        <asp:Button ID="btOK" runat="server" Text="OK" Width="55px" OnClick="btOK_Click" />
                        <asp:Button ID="btCancel" runat="server" Text="Cancel" OnClick="btCancel_Click" />
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Button ID="btEdit" runat="server" Text="Edit" Width="55px" OnClick="btEdit_Click" />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="ID">
                    <EditItemTemplate>
                        <asp:TextBox ID="tbID" runat="server" Text='<%# Bind("ID") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Sex">
                    <EditItemTemplate>
                        &nbsp;
                        <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal">
                            <asp:ListItem Value="0">Boy</asp:ListItem>
                            <asp:ListItem Value="1">Girl</asp:ListItem>
                        </asp:RadioButtonList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lSex" runat="server" Text='<%# Bind("sex") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
   
    </div>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>
 
(完)