Проблема обновления вложенной сетки ASP.Net при привязке данных через SQL Server - PullRequest
1 голос
/ 30 января 2012

Я работаю над редактируемым Nested GridView. Я нашел эту статью Найдено в коде проекта

  1. Я хочу добиться того же, связав 2 родительско-дочерние сетки из Code-Behind вместо asp: AccessDataSource со страницы разметки.

  2. Также, пожалуйста, предложите, как реализовать это с помощью панели обновления, так как при использовании панели обновления, когда я нажимаю кнопку редактирования в дочерней сетке, она сворачивает дочернюю сетку.

Я пробовал что-то подобное, но у меня ничего не получилось.

 public partial class test : System.Web.UI.Page
{
    #region Variables
    string gvUniqueID = String.Empty;
    int gvNewPageIndex = 0;
    int gvEditIndex = -1;
    string gvSortExpr = String.Empty;
    private string gvSortDir
    {

        get { return ViewState["SortDirection"] as string ?? "ASC"; }

        set { ViewState["SortDirection"] = value; }

    }
    #endregion

    protected void Page_Load(object sender, EventArgs e)
    {

            userroles a = new userroles();
            this.GridView1.DataSource = a.GetCustomersTable();
            this.GridView1.DataBind();

    }
    //This procedure returns the Sort Direction
    private string GetSortDirection()
    {
        switch (gvSortDir)
        {
            case "ASC":
                gvSortDir = "DESC";
                break;

            case "DESC":
                gvSortDir = "ASC";
                break;
        }
        return gvSortDir;
    }

    //This procedure prepares the query to bind the child GridView
    private AccessDataSource ChildDataSource(string strCustometId, string strSort)
    {
        string strQRY = "";
        AccessDataSource dsTemp = new AccessDataSource();
        dsTemp.DataFile = "App_Data/Northwind.mdb";
        strQRY = "SELECT [Orders].[CustomerID],[Orders].[OrderID]," +
                                "[Orders].[ShipAddress],[Orders].[Freight],[Orders].[ShipName] FROM [Orders]" +
                                " WHERE [Orders].[CustomerID] = '" + strCustometId + "'" +
                                "UNION ALL " +
                                "SELECT '" + strCustometId + "','','','','' FROM [Orders] WHERE [Orders].[CustomerID] = '" + strCustometId + "'" +
                                "HAVING COUNT(*)=0 " + strSort;

        dsTemp.SelectCommand = strQRY;
        return dsTemp;
    }   

    #region GridView1 Event Handlers
    //This event occurs for each row
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        GridViewRow row = e.Row;
        string strSort = string.Empty;

        // Make sure we aren't in header/footer rows
        if (row.DataItem == null)
        {
            return;
        }

        //Find Child GridView control
        GridView gv = new GridView();
        gv = (GridView)row.FindControl("GridView2");

        //Check if any additional conditions (Paging, Sorting, Editing, etc) to be applied on child GridView
        if (gv.UniqueID == gvUniqueID)
        {
            gv.PageIndex = gvNewPageIndex;
            gv.EditIndex = gvEditIndex;
            //Check if Sorting used
            if (gvSortExpr != string.Empty)
            {
                GetSortDirection();
                strSort = " ORDER BY " + string.Format("{0} {1}", gvSortExpr, gvSortDir);
            }
            //Expand the Child grid
            ClientScript.RegisterStartupScript(GetType(), "Expand", "<SCRIPT LANGUAGE='javascript'>expandcollapse('div" + ((DataRowView)e.Row.DataItem)["CustomerID"].ToString() + "','one');</script>");
        }

        //Prepare the query for Child GridView by passing the Customer ID of the parent row
        gv.DataSource = ChildDataSource(((DataRowView)e.Row.DataItem)["CustomerID"].ToString(), strSort);
        gv.DataBind();

        //Add delete confirmation message for Customer
        //LinkButton l = (LinkButton)e.Row.FindControl("linkDeleteCust");
        //l.Attributes.Add("onclick", "javascript:return " +
        //"confirm('Are you sure you want to delete this Customer " +
        //DataBinder.Eval(e.Row.DataItem, "CustomerID") + "')");

    }


    #endregion

    #region GridView2 Event Handlers
    protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView gvTemp = (GridView)sender;
        gvUniqueID = gvTemp.UniqueID;
        gvNewPageIndex = e.NewPageIndex;
        GridView1.DataBind();
    }

    protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "AddOrder")
        {
            try
            {
                GridView gvTemp = (GridView)sender;
                gvUniqueID = gvTemp.UniqueID;

                //Get the values stored in the text boxes
                string strCustomerID = gvTemp.DataKeys[0].Value.ToString();  //Customer ID is stored as DataKeyNames
                string strFreight = ((TextBox)gvTemp.FooterRow.FindControl("txtFreight")).Text;
                string strShipperName = ((TextBox)gvTemp.FooterRow.FindControl("txtShipperName")).Text;
                string strShipAdress = ((TextBox)gvTemp.FooterRow.FindControl("txtShipAdress")).Text;

                //Prepare the Insert Command of the DataSource control
                string strSQL = "";
                strSQL = "INSERT INTO Orders (CustomerID, Freight, ShipName, " +
                        "ShipAddress) VALUES ('" + strCustomerID + "'," + float.Parse(strFreight) + ",'" +
                        strShipperName + "','" + strShipAdress + "')";

                //AccessDataSource1.InsertCommand = strSQL;
                //AccessDataSource1.Insert();
                ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Order added successfully');</script>");

                GridView1.DataBind();
            }
            catch (Exception ex)
            {
                ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</script>");
            }
        }
    }

    protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView gvTemp = (GridView)sender;
        gvUniqueID = gvTemp.UniqueID;
        gvEditIndex = e.NewEditIndex;
        GridView1.DataBind();
    }

    protected void GridView2_CancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        GridView gvTemp = (GridView)sender;
        gvUniqueID = gvTemp.UniqueID;
        gvEditIndex = -1;
        GridView1.DataBind();
    }

    protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        try
        {
            GridView gvTemp = (GridView)sender;
            gvUniqueID = gvTemp.UniqueID;

            //Get the values stored in the text boxes
            string strOrderID = ((Label)gvTemp.Rows[e.RowIndex].FindControl("lblOrderID")).Text;
            string strFreight = ((TextBox)gvTemp.Rows[e.RowIndex].FindControl("txtFreight")).Text;
            string strShipperName = ((TextBox)gvTemp.Rows[e.RowIndex].FindControl("txtShipperName")).Text;
            string strShipAdress = ((TextBox)gvTemp.Rows[e.RowIndex].FindControl("txtShipAdress")).Text;

            //Prepare the Update Command of the DataSource control
            AccessDataSource dsTemp = new AccessDataSource();
            dsTemp.DataFile = "App_Data/Northwind.mdb";
            string strSQL = "";
            strSQL = "UPDATE Orders set Freight = " + float.Parse(strFreight) + "" +
                     ",ShipName = '" + strShipperName + "'" +
                     ",ShipAddress = '" + strShipAdress + "'" +
                     " WHERE OrderID = " + strOrderID;
            dsTemp.UpdateCommand = strSQL;
            dsTemp.Update();
            ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Order updated successfully');</script>");

            //Reset Edit Index
            gvEditIndex = -1;

            GridView1.DataBind();
        }
        catch { }
    }

    protected void GridView2_RowUpdated(object sender, GridViewUpdatedEventArgs e)
    {
        //Check if there is any exception while deleting
        if (e.Exception != null)
        {
            ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</script>");
            e.ExceptionHandled = true;
        }
    }

    protected void GridView2_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        GridView gvTemp = (GridView)sender;
        gvUniqueID = gvTemp.UniqueID;

        //Get the value        
        string strOrderID = ((Label)gvTemp.Rows[e.RowIndex].FindControl("lblOrderID")).Text;

        //Prepare the Update Command of the DataSource control
        string strSQL = "";

        try
        {
            strSQL = "DELETE from Orders WHERE OrderID = " + strOrderID;
            AccessDataSource dsTemp = new AccessDataSource();
            dsTemp.DataFile = "App_Data/Northwind.mdb";
            dsTemp.DeleteCommand = strSQL;
            dsTemp.Delete();
            ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('Order deleted successfully');</script>");
            GridView1.DataBind();
        }
        catch { }
    }

    protected void GridView2_RowDeleted(object sender, GridViewDeletedEventArgs e)
    {
        //Check if there is any exception while deleting
        if (e.Exception != null)
        {
            ClientScript.RegisterStartupScript(GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</script>");
            e.ExceptionHandled = true;
        }
    }

    protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //Check if this is our Blank Row being databound, if so make the row invisible
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if (((DataRowView)e.Row.DataItem)["OrderID"].ToString() == String.Empty) e.Row.Visible = false;
        }
    }

    protected void GridView2_Sorting(object sender, GridViewSortEventArgs e)
    {
        GridView gvTemp = (GridView)sender;
        gvUniqueID = gvTemp.UniqueID;
        gvSortExpr = e.SortExpression;
        GridView1.DataBind();
    }
    #endregion

}

Заранее благодарим за ваше время.

1 Ответ

0 голосов
/ 01 февраля 2012

Вы можете сослаться на это.

Это использует источник данных объекта

 <asp:UpdatePanel runat="server" UpdateMode="Always" ID="ParentPanel">
<ContentTemplate>
<asp:Label ID="lbltest" runat="server" />
<asp:GridView   ID="grdOrders" 
                DataKeyNames="OrderId" 
                GridLines="None"  
                AutoGenerateColumns="false" 
                runat="server" 
                DataSourceID="objOrders" 
                CssClass="mGrid" 
                PagerStyle-CssClass="pgr" 
                AlternatingRowStyle-CssClass="alt"
                AllowPaging  ="true" 
                PageSize="10" 
                OnRowCommand="grdOrders_RowCommand" 
                OnRowDataBound ="grdOrders_RowDataBound" >
    <Columns>
        <asp:TemplateField ItemStyle-Width="9">
            <ItemTemplate>
                <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                    runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="companyname" HeaderText="Company Name" SortExpression="companyname" />
        <asp:BoundField DataField="employeename" HeaderText="Employee Name" SortExpression="employeename" />
        <asp:BoundField DataField="orderdate" HeaderText="Order Name" SortExpression="orderdate" />
        <asp:BoundField DataField="requireddate" HeaderText="Required Date" SortExpression="requireddate" />
        <asp:BoundField DataField="shippeddate" HeaderText="Shipped Date" SortExpression="shippeddate" />  
        <asp:TemplateField>
            <ItemTemplate>
                <asp:PlaceHolder ID="objPHOrderDetails" runat="server" Visible="true">
                <tr>
                    <td width="9">
                    </td>
                    <td colspan="6">
                        <asp:UpdatePanel runat="server" ID="ChildControl">
                        <ContentTemplate>
                        <asp:GridView   ID="grdOrderDetails" 
                                        GridLines="None"  
                                        AutoGenerateColumns="false" 
                                        runat="server" 
                                        DataSourceID="objOrderDetails" 
                                        CssClass="mGrid"  
                                        AllowPaging  ="true"  
                                        PageSize="2"
                                        >
                        <EditRowStyle BackColor="#2461BF" />
                        <Columns>
                            <asp:BoundField DataField="PRODUCTNAME" HeaderText="Product Name" SortExpression="PRODUCTNAME" ReadOnly="true" />
                            <asp:BoundField DataField="QUANTITYPERUNIT" HeaderText="Quantity Per Unit" SortExpression="QUANTITYPERUNIT" ReadOnly="true"  />
                            <asp:BoundField DataField="QUANTITY" HeaderText="Quantity" SortExpression="QUANTITY"/>
                            <asp:BoundField DataField="UNITPRICE" HeaderText="Unit Price" SortExpression="UNITPRICE" ReadOnly="true"  />
                            <asp:BoundField DataField="DISCOUNT" HeaderText="Discount" SortExpression="DISCOUNT" ReadOnly="true"  />  
                            <asp:BoundField DataField="TotalAmount" HeaderText="TotalAmount" SortExpression="TotalAmount" ReadOnly="true"  />  
                            <asp:CommandField ShowEditButton="True" ButtonType="Image" EditImageUrl="Include/images/gridplus.gif" UpdateImageUrl="Include/images/gridplus.gif" CancelImageUrl="Include/images/gridminus.gif" />
                        </Columns>
                    </asp:GridView>
                    </ContentTemplate>
                    </asp:UpdatePanel>
                    <asp:ObjectDataSource   ID="objOrderDetails" 
                                            runat="server" 
                                            SelectMethod="GetOrdersDetailsList" 
                                            UpdateMethod="UpdateOrdersDetails"
                                            onupdated="grdOrderDetails_Updated"
                                            EnablePaging="true" 
                                            TypeName="clsGeneralFunctions" 
                                            SelectCountMethod="GetOrdersDetailsCount">
                        <SelectParameters>
                            <asp:Parameter Direction="Input" Name="StartRowIndex" type="Int32" />
                            <asp:Parameter Direction="Input" Name="MaximumRows" type="Int32" />
                            <asp:Parameter Direction="Input" Name="OrderId" DefaultValue="0" type="Int32" />
                        </SelectParameters>                                
                        <UpdateParameters>
                            <asp:Parameter Direction="Input"  Name="OrderId" DefaultValue="0" type="Int32" />
                            <asp:Parameter Direction="Input"  Name="Quantity" DefaultValue="0" type="Int32" />
                        </UpdateParameters>
                    </asp:ObjectDataSource>
                </asp:PlaceHolder>                
            </ItemTemplate>
        </asp:TemplateField>                      
    </Columns>    
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>

<asp:ObjectDataSource   ID="objOrders" 
                        runat="server" 
                        SelectMethod="GetOrders" 
                        EnablePaging="true" 
                        TypeName="clsGeneralFunctions" 
                        StartRowIndexParameterName="StartRowIndex" 
                        MaximumRowsParameterName="MaximumRows" 
                        SelectCountMethod="GetOrdersCount">
</asp:ObjectDataSource>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...