将数据从一个gridview移动到另一个gridview以进行编辑和更新

时间:2013-10-08 05:38:43

标签: c# asp.net gridview entity-framework-5

我正在开展一个学校项目,以创建一个允许屠夫在线注册和销售肉类的门户网站。现在我创建了两个girdviews,一个用于我的默认目录(显示产品以允许屠夫在创建目录时选择他们的产品),另一个将从gridview1到gridview2获取项目。现在在gridview2中,我希望屠夫能够选择和编辑产品,然后将它们保存到自己的ButcherProducts表中,该表具有StoreID,ProductID,Price,Quantity。现在我可以从gridview1到gridview2获取项目,但我正在努力放置编辑功能,所以屠夫可以编辑和保存。这是我的示例代码。我首先使用实体​​框架代码。

选择类别:                                                                                      

        <td> <asp:GridView ID="Catalog" runat="server" 

            AutoGenerateColumns="False" 
            ItemType="DataAccess.Product"

            AllowSorting="false"
             DataKeyNames="ProductID"


            SelectMethod="GetCatalog">

    <Columns>
        <asp:BoundField DataField="ProductID" HeaderText="ProductID"
            SortExpression="ProductID" />
        <asp:BoundField DataField="ProductName" HeaderText="Product Name"
            SortExpression="ProductName" />
        <asp:BoundField DataField="Description" HeaderText="Description"
            SortExpression="Description" />

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

        <asp:TemplateField HeaderText="Category">

         <ItemTemplate>
                <%#:Item.Category.CategoryName %>
            </ItemTemplate>


        </asp:TemplateField>

           <asp:TemplateField HeaderText="Image">
                <ItemTemplate>
             <img src="..Checkout/images/<%#:Item.ImagePath%>"
                                            width="20" height="25" border="1" />
                     </ItemTemplate>

                </asp:TemplateField>
        <asp:TemplateField HeaderText="Select Products">

           <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>


    </Columns>

C#代码背后:

List<product> tempIDList = new List<product>();
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    private MeatbyMobileContext _db = new MeatbyMobileContext();
    public IQueryable<category> GetCatalogCategories()
    {

        return _db.Categories;

    }

    public IQueryable<product> GetCatalog([Control]int? category)
    {
        var query = _db.Products.Select(p => p);
        if (category.HasValue)
        {
            query = query.Where(p => p.CategoryID == category.Value);

        }
        return query;

    }

    protected void Button4_Click(object sender, EventArgs e)
    {


    for (int z = 0; z < Catalog.Rows.Count; z++)
    {
       MeatbyMobileContext db = new MeatbyMobileContext();


        CheckBox chk =  (CheckBox)Catalog.Rows[z].FindControl("CheckBox1");
        if (chk.Checked)
        {

          int dKey = Convert.ToInt32( Catalog.DataKeys[z].Value);

            Product product = (from c in db.Products
                               where c.ProductID.Equals(dKey)
                            select c).SingleOrDefault();

             tempIDList.Add(product );





        }

    }

    GridView2.DataSource = tempIDList;
    GridView2.DataBind();

1 个答案:

答案 0 :(得分:0)

使用编辑项目模板。它是专为编辑而创建的。在网格视图中,为需要编辑的内容创建相应的编辑项目模板。

<asp:TemplateField HeaderText="Category">

       <ItemTemplate>
     <%#:Item.Category.CategoryName %>
        </ItemTemplate>
       <EditItemTemplate>
       <asp:TextBox  ID="txtCategoryEdit"  runat="server"  Text='<%#Bind("CategoryName")%>' /  >
           <EditItemTemplate>

    </asp:TemplateField>

在你的行更新事件中找到这样的文本框

 protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
       TextBox txtCategoryEdit = (TextBox)GridView2.Rows(e.RowIndex).FindControl("FieldEditTextBox")  ;

            // put your update logic here 
    }

还将Gridview2绑定到对象数据源并指定虚拟更新方法。这将为您节省大量工作。