天天看點

GridView線上編輯純手工打造

當愚蠢的方式奏效的時候,它就不是愚蠢的。——《美國士兵手冊》

作者前言:

在動态網頁(我是指伺服器腳本程式設計)純手工年代,工作量是大,但控制起來非常精确,我稱之為手術刀式程式設計。而今,在利潤支配技術的年代,一夜之間“軟體複用”“架構”“平台”“面向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));

        DataRow dr = dt.NewRow();

        dr["ID"] = "001";

        dr["Sex"] = "0";

        dt.Rows.Add(dr);

        dr = dt.NewRow();

        dr["ID"] = "002";

        dr["ID"] = "003";

        dr["ID"] = "004";

        return dt;

    }

    /// 資料綁定

    private void BindDataa()

        GridView1.DataSource = InitTable();

        GridView1.DataBind();

    protected void Page_Load(object sender, EventArgs e)

        if (!this.IsPostBack)

        {

            GridView1.DataSource = InitTable();

            GridView1.DataBind();

        }

    /// 編輯按鈕按下時

    /// <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();

    /// 取消按鈕按下時

    protected void btCancel_Click(object sender, EventArgs e)

        GridView1.EditIndex = -1;

    /// 确定按鈕按下時

    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;

        //====在這裡做你想要做的事情,比如更新資料庫什麼的======

        //恢複到浏覽狀态

}

線上編輯.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">

                        <asp:TextBox ID="tbID" runat="server" Text='<%# Bind("ID") %>'></asp:TextBox>

                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ID") %>'></asp:Label>

                <asp:TemplateField HeaderText="Sex">

                         

                        <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal">

                            <asp:ListItem Value="0">Boy</asp:ListItem>

                            <asp:ListItem Value="1">Girl</asp:ListItem>

                        </asp:RadioButtonList>

                        <asp:Label ID="lSex" runat="server" Text='<%# Bind("sex") %>'></asp:Label>

            </Columns>

        </asp:GridView>

    </div>

        <asp:Button ID="Button1" runat="server" Text="Button" />

    </form>

(完)

本文轉自 王傑瑞 51CTO部落格,原文連結:http://blog.51cto.com/wangjierui/47650,如需轉載請自行聯系原作者

繼續閱讀