簡體   English   中英

在gridview中編輯行

[英]edit row in gridview

我想為我的代碼提供幫助。 我有2個gridviews。 在第一個gridview中,用戶可以使用復選框選擇他想要的每一行。 這些行在第二個gridview中傳輸。 我所有的代碼都很好地完成了它們。現在,我想在第二個gridview中編輯數量列以更改值,但是我不知道我必須在編輯框中寫些什么。 這是我的代碼:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
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;
using System.Collections;

public partial class ShowLand : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {


        if (!IsPostBack)
        {
            BindPrimaryGrid();
            BindSecondaryGrid();

        }
    }
    private void BindPrimaryGrid()
    {
        string constr = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
        string query = "select * from Land";
        SqlConnection con = new SqlConnection(constr);
        SqlDataAdapter sda = new SqlDataAdapter(query, con);
        DataTable dt = new DataTable();
        sda.Fill(dt);
        gridview2.DataSource = dt;
        gridview2.DataBind();
    }



    private void GetData()
    {
        DataTable dt;
        if (ViewState["SelectedRecords1"] != null)
            dt = (DataTable)ViewState["SelectedRecords1"];
        else
            dt = CreateDataTable();
        CheckBox chkAll = (CheckBox)gridview2.HeaderRow
                            .Cells[0].FindControl("chkAll");
        for (int i = 0; i < gridview2.Rows.Count; i++)
        {
            if (chkAll.Checked)
            {
                dt = AddRow(gridview2.Rows[i], dt);
            }
            else
            {
                CheckBox chk = (CheckBox)gridview2.Rows[i]
                                .Cells[0].FindControl("chk");
                if (chk.Checked)
                {
                    dt = AddRow(gridview2.Rows[i], dt);
                }
                else
                {
                    dt = RemoveRow(gridview2.Rows[i], dt);
                }
            }
        }
        ViewState["SelectedRecords1"] = dt;
    }
    private void SetData()
    {
        CheckBox chkAll = (CheckBox)gridview2.HeaderRow.Cells[0].FindControl("chkAll");
        chkAll.Checked = true;
        if (ViewState["SelectedRecords1"] != null)
        {
            DataTable dt = (DataTable)ViewState["SelectedRecords1"];
            for (int i = 0; i < gridview2.Rows.Count; i++)
            {
                CheckBox chk = (CheckBox)gridview2.Rows[i].Cells[0].FindControl("chk");
                if (chk != null)
                {
                    DataRow[] dr = dt.Select("id = '" + gridview2.Rows[i].Cells[1].Text + "'");
                    chk.Checked = dr.Length > 0;
                    if (!chk.Checked)
                    {
                        chkAll.Checked = false;
                    }
                }
            }
        }
    }
            private DataTable CreateDataTable()
                {
                     DataTable dt = new DataTable();
                     dt.Columns.Add("id");
                     dt.Columns.Add("name");
                     dt.Columns.Add("price");
                     dt.Columns.Add("quantity");
                     dt.Columns.Add("total");
                     dt.AcceptChanges();
                     return dt;
                }
    private DataTable AddRow(GridViewRow gvRow, DataTable dt)
     {
    DataRow[] dr = dt.Select("id = '" + gvRow.Cells[1].Text + "'");
    if (dr.Length <= 0)
    {
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["id"] = gvRow.Cells[1].Text;
        dt.Rows[dt.Rows.Count - 1]["name"] = gvRow.Cells[2].Text;
        dt.Rows[dt.Rows.Count - 1]["price"] = gvRow.Cells[3].Text;
        dt.Rows[dt.Rows.Count - 1]["quantity"] = gvRow.Cells[4].Text;
        dt.Rows[dt.Rows.Count - 1]["total"] = gvRow.Cells[5].Text;
        dt.AcceptChanges();
    }
    return dt;
    }

    private DataTable RemoveRow(GridViewRow gvRow, DataTable dt)
    {
    DataRow[] dr = dt.Select("id = '" + gvRow.Cells[1].Text + "'");
    if (dr.Length > 0)
    {
        dt.Rows.Remove(dr[0]);
        dt.AcceptChanges();
    }
    return dt;
    }

    protected void CheckBox_CheckChanged(object sender, EventArgs e)
    {
    GetData();
    SetData();
    BindSecondaryGrid();
    }

    private void BindSecondaryGrid()
    {
    DataTable dt = (DataTable)ViewState["SelectedRecords1"];
    gridview3.DataSource = dt;
    gridview3.DataBind(); 
    }
  }

源代碼是

<asp:GridView ID="gridview2" runat="server" AutoGenerateColumns="False" 
 DataKeyNames="id" DataSourceID="SqlDataSource5">
 <Columns>
  <asp:TemplateField>
   <HeaderTemplate>
    <asp:CheckBox ID="chkAll" runat="server" onclick = "checkAll(this);"
                  AutoPostBack = "true"  OnCheckedChanged = "CheckBox_CheckChanged"/>
   </HeaderTemplate>
   <ItemTemplate>
       <asp:CheckBox ID="chk" runat="server" onclick = "Check_Click(this)"
               AutoPostBack = "true"  OnCheckedChanged = "CheckBox_CheckChanged" />
   </ItemTemplate>
  </asp:TemplateField>

  <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 
           ReadOnly="True" SortExpression="id" />

  <asp:BoundField DataField="name" HeaderText="name" 
           SortExpression="name" />

  <asp:BoundField DataField="price" HeaderText="price" SortExpression="price" />

  <asp:BoundField DataField="quantity" HeaderText="quantity" 
           SortExpression="quantity" />

  <asp:BoundField DataField="total" HeaderText="total" SortExpression="total" />
 </Columns>
 </asp:GridView>

 <asp:SqlDataSource ID="SqlDataSource5" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT * FROM [Land]"></asp:SqlDataSource>
  <br />
  </div>
<div>

<asp:GridView ID="gridview3" runat="server"
  AutoGenerateColumns = "False" DataKeyNames="id" 
  EmptyDataText = "No Records Selected" >
<Columns>
  <asp:BoundField DataField = "id" HeaderText = "id" />
  <asp:BoundField DataField = "name" HeaderText = "name" ReadOnly="True" />
  <asp:BoundField DataField = "price" HeaderText = "price" 
         DataFormatString="{0:c}" ReadOnly="True" />
  <asp:TemplateField HeaderText="quantity">
  <EditItemTemplate>
     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("quantity")%>'</asp:TextBox>
  </EditItemTemplate>
  <ItemTemplate>
     <asp:Label ID="Label1" runat="server" Text='<%# Bind("quantity") %>'></asp:Label>
  </ItemTemplate>
  </asp:TemplateField>
  <asp:BoundField DataField = "total" HeaderText = "total" 
            DataFormatString="{0:c}" ReadOnly="True" />
            <asp:CommandField ShowEditButton="True" />

 </Columns>
</asp:GridView>

<asp:Label ID="totalLabel" runat="server"></asp:Label>
<br />

     </div>
    </form>
  </body>
</html>

這不是特定的asp.net解決方案,但這就是我在Windows應用程序中執行類似操作的方式。

首先,您必須確保GridView中有一個選定的行( gridView.SelectedRow != null )。 DataTable對象允許您通過不按數字索引而是按DataRow類型的對象索引訪問所需的行來訪問所需的行。 在獲得對要修改的字段值的行的引用之后,只需進行更改即可。

例子如下:

if (gridView.SelectedRow != null)
{
    dataTable.Rows[gridView.SelectedRow].BeginEdit();
    dataTable.Rows[gridView.SelectedRow]["yourFieldName"] = newValue;
    dataTable.Rows[gridView.SelectedRow].EndEdit();
    gridView.DataSource = dataTable;
}

希望我的回答對您有所幫助,因為我以前從未處理過asp.net。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM