简体   繁体   English

在gridview中编辑行

[英]edit row in gridview

I would like to help me with my code. 我想为我的代码提供帮助。 I have 2 gridviews. 我有2个gridviews。 In the first gridview the user can choose with a checkbox every row he wants. 在第一个gridview中,用户可以使用复选框选择他想要的每一行。 These rows are transfered in the second gridview. 这些行在第二个gridview中传输。 All these my code does them well.Now, I want to edit the quantity column in second gridview to change the value but i don't know what i must write in edit box. 我所有的代码都很好地完成了它们。现在,我想在第二个gridview中编辑数量列以更改值,但是我不知道我必须在编辑框中写些什么。 Here is my code: 这是我的代码:

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

and the source code is 源代码是

<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>

This is not particular asp.net solution but that's how I do something like this in my Windows app. 这不是特定的asp.net解决方案,但这就是我在Windows应用程序中执行类似操作的方式。

First of all you shoul make shure that there's a selected row in your GridView ( gridView.SelectedRow != null ). 首先,您必须确保GridView中有一个选定的行( gridView.SelectedRow != null )。 DataTable object allows you to get access to desired row by accessing it not by numeric index but by DataRow -type object index. DataTable对象允许您通过不按数字索引而是按DataRow类型的对象索引访问所需的行来访问所需的行。 After getting a reference to the row which fields' value you want to modify just go ahead with changes. 在获得对要修改的字段值的行的引用之后,只需进行更改即可。

Here's the example: 例子如下:

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

Hope my answer is of any help because I've never dealt with asp.net before. 希望我的回答对您有所帮助,因为我以前从未处理过asp.net。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM