Click here to Skip to main content
15,886,199 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
actually, i'm developing dynamic template using asp.net and c#.
in my usercontrol page i have a listview which is include dynamically created table. once the user edited any of the rows and press the save button before the PageLoad or PageInit i want to execute the ItemUpdating function to save the data to the database.
my listview code is as follow:

XML
<asp:ListView ID="lv_Uc_Module" runat="server"
                    OnItemEditing="lv_Uc_Module_ItemEditing"
                    OnItemDeleting="lv_Uc_Module_ItemDeleting"
                    OnItemCanceling="lv_Uc_Module_ItemCanceling"
                    OnItemDataBound="lv_Uc_Module_ItemDataBound"
                    OnSorting="lv_Uc_Module_Sorting">

                        <LayoutTemplate>
                            <asp:Table runat="server" ID="table_Lv_Layout">
                                <asp:TableRow runat="server" ID="tr_Table_Layout">
                                    <asp:TableCell runat="server" ID="td_Table_Layout">
                                        <asp:Table runat="server" ID="itemPlaceholderContainer">
                                            <asp:TableRow runat="server" ID="tr_Table_IphContainer">
                                                <asp:TableHeaderCell runat="server">
                                                    <asp:PlaceHolder ID="th_Ph_Lv_header" runat="server"></asp:PlaceHolder>
                                                </asp:TableHeaderCell>
                                            </asp:TableRow>
                                            <asp:TableRow runat="server">
                                                <asp:TableCell runat="server">

                                                    <asp:PlaceHolder runat="server" ID="itemPlaceholder" />

                                                </asp:TableCell>

                                            </asp:TableRow>
                                        </asp:Table>
                                    </asp:TableCell>
                                </asp:TableRow>
                                <asp:TableRow runat="server" ID="tr_Validate_Table_Layout">
                                    <asp:TableCell runat="server" ID="td_Validate_Table_Layout" HorizontalAlign="Center" BackColor="#CCCCCC">
                                        <asp:ValidationSummary ID="ValidationSummary1" runat="server" HeaderText="You received the following errors:" ShowMessageBox="true" ShowSummary="false" ValidationGroup="VGEditTmp" />
                                    </asp:TableCell>
                                </asp:TableRow>
                            </asp:Table>
                            <br />
                            <asp:DataPager ID="lv_DataPager" runat="server" PagedControlID="lv_Uc_Module" PageSize="25" OnPreRender="lv_DataPager_PreRender">
                                <Fields>
                                    <asp:NextPreviousPagerField ButtonType="Image" ShowFirstPageButton="true" ShowLastPageButton="true" FirstPageImageUrl="~/Images/First.png" LastPageImageUrl="~/Images/Last.png" NextPageImageUrl="~/Images/Next.png" PreviousPageImageUrl="~/Images/Previous.png" />
                                    <asp:TemplatePagerField>
                                        <PagerTemplate>
                                            <span style="color:Blue;">
                                            </span>
                                        </PagerTemplate>
                                    </asp:TemplatePagerField>
                                </Fields>
                            </asp:DataPager>
                        </LayoutTemplate>

                        <ItemTemplate>
                            <asp:TableRow runat="server">
                                <asp:TableCell runat="server">

                                    <asp:Table runat="server" ID="Table_Lv_ItemTemplate"></asp:Table>

                                </asp:TableCell>
                                <asp:TableCell runat="server">
                                    <asp:Button ID="btn_Edit" runat="server" CommandName="Edit" Text="" CssClass="btn_Edit" CausesValidation="True" Visible="false" />
                                    <asp:Button ID="btn_Delete" runat="server" CommandName="Delete" Text="" CssClass="btn_Delete" CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this item?');" Visible="false" />
                                </asp:TableCell>
                            </asp:TableRow>
                        </ItemTemplate>


and my ItemDataBound function which is include the dynamic table code is as follow:

protected void lv_Uc_Module_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (tempDataBound == 0 && !"".Equals(hid_ChooseModule.Value) && hid_SaveClicked.Value != "1")
    {
        XmlDocument xDocRead = new XmlDocument();
        xDocRead.Load(Server.MapPath("ModuleTemp.xml"));
        lv_Uc_Module_DataBind("");

        Table table_Lv_ItemTemplate = (Table)e.Item.FindControl("Table_Lv_ItemTemplate");
        table_Lv_ItemTemplate.Controls.Clear();
        rowCounter = 0;
        tempDataBound++;
    }

    if (e.Item.ItemType == ListViewItemType.DataItem )
    {
        XmlDocument xDocRead = new XmlDocument();
        xDocRead.Load(Server.MapPath("ModuleTemp.xml"));
        string xModuleName = hid_ChooseModule.Value;
        XmlNode xColCounter;
        TableRow tr_DataBound = new TableRow();
        TableRow tr_Lv_Header = new TableRow();

        if (!"".Equals(hid_ChooseModule.Value))
        {
            xColCounter = xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/List");
        }
        else
        {
            xModuleName = xDocRead.SelectSingleNode("ModuleTemp").FirstChild.Name;
            xColCounter = xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/List");
        }
        int pkCounter = 0, nonPkCounter = 0, colCount = xColCounter.ChildNodes.Count;
        string[] primaryKey = new string[30];
        string[] nonPrimaryKey = new string[colCount + 1];

        for (int i = 1; i <= colCount; i++)
        {
            if (xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/Edit/TableColumn" + i).Attributes.GetNamedItem("IsPrimaryKey").Value == "Y")
            {
                primaryKey[pkCounter] = xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/Edit/TableColumn" + i).Attributes.GetNamedItem("Name").Value;
                pkCounter++;
            }
            else
            {
                nonPrimaryKey[nonPkCounter] = xDocRead.SelectSingleNode("ModuleTemp/" + xModuleName + "/Edit/TableColumn" + i).Attributes.GetNamedItem("Name").Value;
                nonPkCounter++;
            }
        }

        System.Data.DataRowView rowView = e.Item.DataItem as System.Data.DataRowView;

        for (int i = 0; i < pkCounter + nonPkCounter; i++)
        { 
            dataBoundTemp[rowCounter, i] = rowView[i].ToString();
        }
        rowCounter++;

        TableCell tc_Lv_Header = new TableCell();
        if (!"".Equals(hid_ChooseModule.Value))
        {
            if (tempHeader == 0)
            {
                tempHeader++;
                for (int i = 1; i <= pkCounter + nonPkCounter; i++)
                {
                    tc_Lv_Header = new TableCell();
                    Label lb = new Label();

                    if (i <= pkCounter)
                    {
                        lb.Text = primaryKey[i - 1];
                    }
                    else
                    {
                        lb.Text = nonPrimaryKey[i - pkCounter - 1];
                    }

                    lb.ID = "lb" + i + "_Table_IphContainer";
                    tc_Lv_Header.Controls.Add(lb);
                    tc_Lv_Header.CssClass = "th_ItemTemplate";
                    tr_Lv_Header.Cells.Add(tc_Lv_Header);
                }

                tr_Lv_Header.Cells.Add(tc_Lv_Header);

                table_Header.Rows.Add(tr_Lv_Header);
                PlaceHolder th_Ph_Lv_Hedear = (PlaceHolder)lv_Uc_Module.FindControl("th_Ph_Lv_header");
                th_Ph_Lv_Hedear.Controls.Add(table_Header);
            }
        }
        TableCell tc_DataBound = new TableCell();

        if (editTempSelection == e.Item.DataItemIndex)
        {
            for (int i = 1; i <= pkCounter + nonPkCounter; i++)
            {
                //tc_DataBound = new TableCell();
                tc_DataBound = new TableCell();
                TextBox tb = new TextBox();
                //(TextBox)e.Item.FindControl("td_EditTemp" + i);
                tb.Width = 110;
                tb.Text = rowView[i - 1].ToString();
                tb.ID = "td_EditTemp" + i + "_" + e.Item.DataItemIndex;
                tc_DataBound.Controls.Add(tb);
                tc_DataBound.CssClass = "td_Tb_ItemTemplate";
                tr_DataBound.Cells.Add(tc_DataBound);
            }
        }
        else
        {
            for (int i = 1; i <= pkCounter + nonPkCounter; i++)
            {
                tc_DataBound = new TableCell();
                Label lb = new Label();
                lb.Text = rowView[i - 1].ToString();
                lb.ID = "lb_ItemTemp" + i + "_" + e.Item.DataItemIndex;
                tc_DataBound.Controls.Add(lb);
                tc_DataBound.CssClass = "td_Lb_ItemTemplate";
                tr_DataBound.Cells.Add(tc_DataBound);
            }
        }
        // add button to the columns
        if (editTempSelection != e.Item.DataItemIndex)
        {
            tc_DataBound = new TableCell();
            Button btn_Edit = new Button();
            btn_Edit.ID = "btn_Edit";
            btn_Edit.CommandName = "Edit";
            btn_Edit.CssClass = "btn_Edit";
            tc_DataBound.Controls.Add(btn_Edit);
            tr_DataBound.Cells.Add(tc_DataBound);

            tc_DataBound = new TableCell();
            Button btn_Delete = new Button();
            btn_Delete.ID = "btn_Delete";
            btn_Delete.CommandName = "Delete";
            btn_Delete.CssClass = "btn_Delete";
            btn_Delete.CausesValidation = false;
            btn_Delete.OnClientClick = "return confirm('Are you sure you want to delete this item?');";
            tc_DataBound.Controls.Add(btn_Delete);
            tr_DataBound.Cells.Add(tc_DataBound);
        }
        else
        {
            tc_DataBound = new TableCell();
            Button btn_Update = new Button();
            btn_Update.ID = "btn_Update";
            btn_Update.CssClass = "btn_Update";
            btn_Update.Command += new CommandEventHandler(lv_Uc_Module_ItemUpdating);
            btn_Update.CommandName = e.Item.DataItemIndex.ToString();
            tc_DataBound.Controls.Add(btn_Update);
            tr_DataBound.Cells.Add(tc_DataBound);
            hid_SaveClicked.Value = "1";

            tc_DataBound = new TableCell();
            Button btn_Cancel = new Button();
            btn_Cancel.ID = "btn_Cancel";
            btn_Cancel.CommandName = "Cancel";
            btn_Cancel.CssClass = "btn_Cancel";
            btn_Cancel.CausesValidation = false;
            tc_DataBound.Controls.Add(btn_Cancel);
            tr_DataBound.Cells.Add(tc_DataBound);
            tr_DataBound.CssClass = "tr_Edit_ItemTemplate";
        }
        // add columns to the row
        tr_DataBound.Cells.Add(tc_DataBound);
        table_Lv_ItemTemplate = (Table)e.Item.FindControl("Table_Lv_ItemTemplate");
        table_Lv_ItemTemplate.Rows.Add(tr_DataBound);

    }
}


the problem is once the user click on the save button the ItemUpdating function never executed. i have used bellow method to call the function on save button click but does not work.

SQL
btn_Update.Command += new CommandEventHandler(lv_Uc_Module_ItemUpdating);
btn_Update.CommandName = e.Item.DataItemIndex.ToString();


could you pplease guide me what should i do to prevent from pageLoad and call the ItemUpdating function on save button click. appreciate your consideration.
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900