Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过编程方式使用ObjectDataSource和代码隐藏更新ASP.NET GridView行_Gridview_Objectdatasource - Fatal编程技术网

如何通过编程方式使用ObjectDataSource和代码隐藏更新ASP.NET GridView行

如何通过编程方式使用ObjectDataSource和代码隐藏更新ASP.NET GridView行,gridview,objectdatasource,Gridview,Objectdatasource,我在CodeBehind上使用ObjectDataSource实现可编辑GridView时遇到问题;我想知道我需要在代码隐藏(事件)中添加哪些缺失的部分: ASPX代码: <asp:GridView ID="grdPlayer" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" o

我在CodeBehind上使用ObjectDataSource实现可编辑GridView时遇到问题;我想知道我需要在代码隐藏(事件)中添加哪些缺失的部分:

ASPX代码:

<asp:GridView ID="grdPlayer" runat="server" AutoGenerateColumns="False" 
            AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" 
            onrowediting="grdPlayer_RowEditing" 
            onrowcancelingedit="grdPlayer_RowCancelingEdit" 
onrowupdating="grdPlayer_RowUpdating">
          <Columns>
                <asp:BoundField DataField="ID" Visible="false"/>
                <asp:BoundField DataField="FirstName" HeaderText="First Name" 
                    SortExpression="FirstName" />  
                <asp:BoundField DataField="LastName" HeaderText="LastName"   
                    SortExpression="LastName" />  
                <asp:BoundField DataField="Age" HeaderText="Age"   
                    SortExpression="Age" />  

          </Columns>  


        </asp:GridView>
  using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;

    public partial class _Default : System.Web.UI.Page
    {
        ObjectDataSource dataSource = new ObjectDataSource();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                dataSource.TypeName = "Cricket.CricketBL";
                dataSource.UpdateMethod = "UpdatePlayer";
                Parameter p1 = new Parameter("ID", DbType.Int32);
                Parameter p2 = new Parameter("FName", DbType.String);
                Parameter p3 = new Parameter("LName", DbType.String);
                Parameter p4 = new Parameter("Age", DbType.Int32);
                dataSource.UpdateParameters.Add(p1);
                dataSource.UpdateParameters.Add(p2);
                dataSource.UpdateParameters.Add(p3);
                dataSource.UpdateParameters.Add(p4);

                bindGridView();

            }
        }

        #region Grid Events
        protected void grdPlayer_RowEditing(object sender, GridViewEditEventArgs e)
        {
            grdPlayer.EditIndex = e.NewEditIndex;
        }

        protected void grdPlayer_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            grdPlayer.EditIndex = -1;
            bindGridView();


        }



        protected void grdPlayer_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            grdPlayer.EditIndex = -1;
            bindGridView();
        }
        #endregion

        void bindGridView()
        {
            dataSource.SelectMethod = "GetAllPlayer";
            dataSource.TypeName = "Cricket.CricketBL";
            grdPlayer.DataSource = dataSource;
            grdPlayer.DataBind();
        }
    }
  • 我应该把UpdateMethod代码放在哪里(当前在加载页面)
  • 我应该在代码隐藏中实现哪些事件,以便我编辑的网格行使用正确的新值调用UpdateMethod
  • 当我点击编辑链接时,它不会在编辑模式下呈现GridView(文本框等);我必须点击它两次这样做;为什么?
  • 大问题:单击更新链接不会调用ObjectDataSource UpdateMethod
  • 泽伊

    您的方法仅适用于学习阶段。对于最佳实践或在生产阶段,我们应该始终在应用程序的多个层之间明确划分。它们主要是数据访问层(DAL)、业务逻辑层(BLL)和表示层(在网页中)。这种概念通常被称为持续无知。如前所述

    调用repository类和两个构造函数的CRUD方法使您可以将业务逻辑类用于您选择的任何后端数据存储。业务逻辑类不需要知道它调用的类如何持久化数据。(这通常被称为持续无知。)

    我强烈建议你经历这一切,继续努力,你会得到启发

    Zee

    回答你的4个问题

    1和4:将“onRowUpdated”添加到.aspx文件中的gridview属性中。说onRowUpdated=“grdPlayer\u RowUpdated”。在此处添加用于更新的代码

    2和3:

    与其使用BoundField,不如使用TemplateField。它将具有EditItemTemplate和ItemTemplate,如下所示:

    <asp:TemplateField HeaderText="FirstName">
        <EditItemTemplate>
            <asp:TextBox ID="FName" runat="server" Text='<%# Bind("FirstName")%>'></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label2" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    
    <asp:TemplateField HeaderText="LastName">
        <EditItemTemplate>
            <asp:TextBox ID="LName" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label2" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Age">
        <EditItemTemplate>
            <asp:TextBox ID="Age" runat="server" Text='<%# Bind("Age") %>'></asp:TextBox>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="Label2" runat="server" Text='<%# Bind("Age") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
    

    我希望这有帮助

    您的代码中没有使用objectDataSource!
    int index = grdPlayer.EditIndex;
    
    GridViewRow row = grdPlayer.Rows[index];
    Int64 ID = (Int64)grdPlayer.DataKeys[index].Value;
    
    TextBox FirstName = (TextBox)row.FindControl("FName");
    TextBox Lastname = (TextBox)row.FindControl("LName");
    TextBox Age = (TextBox)row.FindControl("Age");
    
    e.NewValues["FirstName"] = FirstName.Text;
    e.NewValues["LastName"] = Lastname.Text;
    e.NewValues["Age"] = Age.Text;