0

我想通过单击一个按钮来保存 Gridview 的一个字段。是否有可能获取所有数据?

我尝试过的事情

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="GridViewCellEdit._Default" enableEventValidation="false" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <script type="text/javascript">

        function GetSelectedRow(lnk) {
            debugger;
            var row = lnk.parentNode.parentNode;
            var rowIndex = row.rowIndex - 1;
            alert("row: " + rowIndex);
            return false;
        }
    </script>
    <asp:Panel ID="pnl1" runat="server">
        <asp:Button ID="Button1" runat="server" Text="Button Save" OnClick="Button1_Click" />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" OnRowDataBound="GridView1_RowDataBound">
        </asp:GridView>
    </asp:Panel>
</asp:Content>

所有列都是自动生成的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GridViewCellEdit
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            MyEntity entity = new MyEntity();
            List<MyEntity> list = new List<MyEntity>();
            list.Add(new MyEntity() { ID = 1,Name="Name1",Address="It is very long field so no more button in grid1"});
            list.Add(new MyEntity() { ID = 2, Name = "Name2", Address = "It is very long field so no more button in grid2" });
            list.Add(new MyEntity() { ID = 3, Name = "Name3", Address = "It is very long field so no more button in grid3" });
            list.Add(new MyEntity() { ID = 4, Name = "Name4", Address = "It is very long field so no more button in grid4" });
            list.Add(new MyEntity() { ID = 4, Name = "Name5", Address = "It is very long field so no more button in grid5" });
            list.Add(new MyEntity() { ID = 6, Name = "Name6", Address = "It is very long field so no more button in grid6" });
            list.Add(new MyEntity() { ID = 7, Name = "Name7", Address = "It is very long field so no more button in grid7" });
            list.Add(new MyEntity() { ID = 8, Name = "Name8", Address = "It is very long field so no more button in grid8" });
            list.Add(new MyEntity() { ID = 9, Name = "Name9", Address = "It is very long field so no more button in grid9" });
            GridView1.DataSource = list;
            GridView1.DataBind();
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                 e.Row.Attributes.Add("onclick", "this.style.backgroundColor='orange'");
            e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='white'");
            e.Row.Cells[2].Width = new Unit("700px");
            TextBox txtAddress = new TextBox();
            txtAddress.ReadOnly = false;
            txtAddress.Style.Add("width", "99%");
            e.Row.Cells[2].Controls.Add(txtAddress);
            e.Row.Cells[2].Style.Add("text-align", "center");
            txtAddress.Text = e.Row.Cells[2].Text;
            txtAddress.Attributes.Add("onblur", "return GetSelectedRow(this); ");
            GridView1.Attributes.Add("style", "table-layout:fixed");
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //Setp1 : do some trick to get the address 
            //Step2 : Check if address is changed as only address field is editable
            //Step3 : Update database for all the changed address in a loop
            //Setp4 : reload the grid with updated Data
        }
    }
    public class MyEntity
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
    }
}

是否可以从 javascript 中获取更改地址并从主页中保存..

4

1 回答 1

1

您可以循环行并获取每行的地址字段。

foreach (GridViewRow row in GridView1.Rows)
{
    string address = row.Cells[2].Text;
    string name = row.Cells[1].Text;

    //Update your DB here
}

在此处调用 LoadData 方法

于 2013-09-26T06:55:54.473 回答