Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

access the textbox of dynamically creaed table inside the listview

Status
Not open for further replies.

fsh290

Programmer
Dec 7, 2011
6
actually i'm developing web template using asp.net and c#.
i have mainTemp.aspx page which is include usercontrol page. in my usercontrol i have a listview which in this listview i have to create dynamic table inside the ItemTemplate based on a XML file. my listview code including the ItemTemplate is:
Code:
<asp:ListView ID="lv_Uc_Module" runat="server"
                    onitemediting="lv_Uc_Module_ItemEditing" 

                    onitemcanceling="lv_Uc_Module_ItemCanceling" 
                    onitemdeleting="lv_Uc_Module_ItemDeleting"  
                    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>
as you can see at the listview ItemTemplate part i have put a with ID = "Table_Lv_ItemTemplate" which i create the dynamic table here.
i have put the dynamic table code at the ItemDataBound function as below:
Code:
protected void lv_Uc_Module_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (tempDataBound == 0 && !"".Equals(hid_ChooseModule.Value))
    {
        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();
        //table_Lv_ItemTemplate.Dispose();

        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;
        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();
                TextBox tb = new TextBox();
                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";
            btn_Edit.CausesValidation = true;
            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.CommandName = "Update";
            btn_Update.CssClass = "btn_Update";
            btn_Update.ValidationGroup = "VGEditTmp";
            tc_DataBound.Controls.Add(btn_Update);
            tr_DataBound.Cells.Add(tc_DataBound);

            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";
        }

        if (editTempSelection == e.Item.DataItemIndex)
        {
            lv_Uc_Module_ItemUpdating(sender, e.Item.DataItemIndex);
        }
        // add columns to the row
        tr_DataBound.Cells.Add(tc_DataBound);
        Table table_Lv_ItemTemplate = (Table)e.Item.FindControl("Table_Lv_ItemTemplate");
        table_Lv_ItemTemplate.Rows.Add(tr_DataBound);
    }
}
the result of this data bound is Sample.jpg image. and it dynamically read the data from XML file and create the table.
b3naeh.jpg


once the users click on the edit button as below image, they can edit the row data.
aowbpu.jpg


the problem is here, that i can not access to these textboxes to get their data and update the data base. and i can not delete the rows.
i have tried TextBox tempLabelLv = (TextBox)add_Table.FindControl("td_EditTemp2_5"); the add_Table is my dynamic table id and i have tried TextBox tempLabelLv = (TextBox)lv_Uc_Module.FindControl("td_EditTemp2_5"); that lv_Uc_Module is my listview id. but still i can not access to these textboxes.
could you please guide me how to overcome this problem, and get the data of these textboxes to update the database.
appreciate your consideration.
 
I would view the source and check how the IDs are being built for the textboxes you want. From there, you can find out the correct way to "Find()" the textboxes and get the value.
Since these are nested controls, you have to "Find()" the outer most control first, then the next, until you finally reach your textboxes.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top