Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 12:46 Der er 68 kommentarer og
1 løsning

repeater og checkboxes

Jeg har en repeater og vil gerne for hver række lave en checkbox.
Hvordan gør jeg det?
Avatar billede snepnet Nybegynder
12. marts 2005 - 13:02 #1
Hej forceprogrammer :o)

du kan bare indsætte en i din itemtemplate sådan her :
(her et eksempel på en checkbox der er databundet til en kolonne i datakilden med navnet FldBool).

<asp:Repeater id="Repeater1" runat="server">
    <ItemTemplate>
        <asp:CheckBox ID="chkCheck" Runat="server" Checked='<%# DataBinder.Eval(Container, "DataItem.FldBool") %>' ></asp:CheckBox>
    </ItemTemplate>
</asp:Repeater>

Håber det var noget i den stil du var ude efter.

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 13:04 #2
Hej snepnet :)
men Jeg tror ikke jeg er helt med.
Du skriver ID="chkCheck"

Der kommer jo til at være mange rækker. Hvordan håndteres det?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 13:06 #3
Jeg har prøvet at sætte en ind som du foreskriver, men intet bliver vist.
Jeg troede at man skulle bruge en liste af en art eller sådan noget?
Avatar billede snepnet Nybegynder
12. marts 2005 - 13:20 #4
hej igen :o)

at du angiver id'et på kontrollen gør, at du lettere kan finde den senere... du kan f.eks. lave et loop over alle rækker, og hive værdien af checkboxen ud sådan her :

foreach(RepeaterItem ri in someRepeater.Items)
{
  CheckBox cb = (CheckBox)ri.FindControl("chkCheck");
  bool checked = cb.Checked;
}

chkCheck bliver ikke det resulterende name i din html.... frameworket sikrer at dine id's bliver unikke (hvis du kigger på den resulterende html, er det reletivt let at se hvordan det foregår - ellers kan du bare spørge).

normalt vil du databinde en repeater til en eller anden form for liste - f.eks. et dataview, en datatable ell.

hiver du f.eks. noget data op i et dataset :

DataSet ds = someDal.GetData(...);
kan du få renderet din repeater udfra de data du har hentet :

someRepeater.DataSource = ds.Tables[0]; // første tabel i datasættet
someRepeater.DataBind();

Mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 13:21 #5
okay jeg tror jeg har fået det til at virke. Nu vil jeg så gerne lave en "vælg alle" knap.
MEn jeg ser dotnet gir dem et rimeligt underligt navn. Hvordan implementerer jeg nemmest sådan en vælg alle funktion?
Avatar billede snepnet Nybegynder
12. marts 2005 - 13:30 #6
du kan bare sætte en knap ind - og abbonnere på den click-event, og så i handleren skrive noget i denne stil :

protected void btnSomeButton_Click(object sender, EventArgs e)
{
  foreach(RepeaterItem ri in someRepeater.Items)
  {
    CheckBox cb = (CheckBox)ri.FindControl("chkCheck");
    cb.Checked = true;
  }
}

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 13:57 #7
det ser ud som om min repeater er tom inde i eventhandleren
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 13:57 #8
skal jeg slå viewstate til på den?
Avatar billede snepnet Nybegynder
12. marts 2005 - 14:03 #9
jeps - har du da specifikt slået viewstate fra ?
(forsvinder indholdet i din repeater når du har lavet et postback ?)
mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:04 #10
Ja det har jeg.
Undskyld snepnet. Jeg glemte at informere dig om at jeg er gået videre med at lave noget tilsvarende.
Selectall løste jeg ved at lave et clientscript
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:06 #11
Men problemet er at jeg
har mine repeaters (jeg har 2 nestede) liggende på en usercontrol.
Disse bliver dynamisk loadet ind i en placeholder alt afhængig af hvad brugeren vil se.
Hver repeater gruppere data på en bestemt måde.
Jeg har så en knap der hedder opret bestilling som ligger i min aspx fil.
Når denne trykkes skal der så køres igennem alle checkboxes og oprettes bestillinger.
Problemet er at jeg ikke kan få fat i min repeater da den jo ligger på den usercontrol der blev loadet ind på siden.

Så hvordan omgår jeg det problem?
Undskyld hvis jeg udnytter din venlighed. Jeg skal nok give dig flere point...Bare nemmere lige at have det hele samlet her :)
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:11 #12
Hvordan kan jeg få fat i den repeater i aspx.cs klassen?
Avatar billede snepnet Nybegynder
12. marts 2005 - 14:13 #13
bare iorden :o)
det mest nærliggende er nok at du gør din repeater til en public property på din usercontrol - og så bare gafler den der.

public Repeater InternalRepeater
{
  get{return this.internalRepeater;}
}

ellers har du adgang til din usercontrols kontroller ved
someUserControl.Controls[index på den du vil have fat];

men som sagt.... det lyder som om din interne repeater er en væsentlig del af dit interface til kontrollen, hvorfor det virker ok at lave bemeldte property.

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:15 #14
hmmm men dvs. jeg skal oprette en instans af min usercontrol nede i eventhandleren eller hvad?
Jeg kan ikke lige se hvordan jeg har adgang til mit usercontrolobjekt nede fra eventhandleren?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:19 #15
som sagt bliver den rette control lagt i placeholderen dynamisk.
Det sker altså vha. placeholder.controls.add(Page.LoadControl("usrctrl.ascx"))

Så jeg har ikke rigtig adgang til controllen når siden laver postback
Avatar billede snepnet Nybegynder
12. marts 2005 - 14:28 #16
hvis du kun lægger én enkelt ind - kan du jo gemme referencen :
Control c = LoadControl(...);

du også give den et id - hvorefter du nemmere kan finde den igen :
Control c = LoadControl(...);
c.ID = someId;

og i din handler :
placeholder.FindControl(someId);

denne skal så castes til din usercontrol :
SomeUserControl userControl = (SomeUserControl )placeholder.FindControl(someId);

og du kan så tilgå din repeater ved :
userControl.InnerRepeater;

men .... nu ved jeg så ikke helt hvad det er du skal har brug for at oplysninger fra "innerrepeateren" ... hvis du f.eks. skal have en stak id's som er valgt ved checkboxen... kan du jo pakke lidt mere af funktionaliteten ind i din usercontrol, og hente dem direkte ved en property som
int[] selectedIds = userControl.SelectedIds;

Mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:42 #17
Okay...jeg har prøvet at gøre som du foreskriver. Men jeg får en exception.
"Object reference not set to an instance of an object"

Jeg har skrevet følgende kode:

private void btnMakeQuickOrder_Click(object sender, EventArgs e)
        {
       
            vegasonline.UIL.sted_automat_bestilling tmpCtrl=(vegasonline.UIL.sted_automat_bestilling)plcDynamicResults.FindControl("viewStedCtrl");
           
            Response.Write("order created:"+tmpCtrl.getRepeater().Items.Count);
        }
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:44 #18
Således opretter loader jeg kontrollen:

                System.Web.UI.Control ctrl=this.Page.LoadControl("sted_automat_linier.ascx");
                ctrl.ID="viewStedCtrl";
                ctrl.EnableViewState=true;
                plcDynamicResults.Controls.Add(ctrl);
Avatar billede snepnet Nybegynder
12. marts 2005 - 14:50 #19
må jeg se hele den metode hvor du opretter kontrollen ?
mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:51 #20
Burde den placeholder ikke blive oprettet automatisk?
Og derved indhente de objekter der blev placeret i den i forrige serverroundtrip.
Altså indhente dem via viewstatet?

Jeg fatter ikke hvorfor placeholderen er tom...
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:51 #21
jada...heri oprettes kontrollen:


private void doPaging()
        {   
            if(Session["searchTable"]==null)
                Session["searchTable"]=defaultSearchCriteria();
            int chosenGrouping=Convert.ToInt32(cmbGrouping.SelectedValue);
            if(chosenGrouping==1)//Stedsortering
            {
                bll.PagingStedGrouping((int)Session["currentpage"],
                    50000,
                    (System.Collections.Hashtable)Session["searchTable"],
                    (System.Data.DataTable)Session["userInfo"]);
                collapseName="collapsetAutomatTable";
                System.Web.UI.Control ctrl=this.Page.LoadControl("sted_automat_linier.ascx");
                ctrl.ID="viewStedCtrl";
                ctrl.EnableViewState=true;
                plcDynamicResults.Controls.Add(ctrl);
            }
            else if(chosenGrouping==2)//Bestillingsortering
            {
                bll.PagingOrderGrouping((int)Session["currentpage"],
                    50000,
                    (System.Collections.Hashtable)Session["searchTable"],
                    (System.Data.DataTable)Session["userInfo"]);
                collapseName="collapseOrderLines";
                System.Web.UI.Control ctrl=this.Page.LoadControl("BestillingSted_Linier.ascx");
                ctrl.ID="viewOrderUserCtrl";
                ctrl.EnableViewState=true;
                plcDynamicResults.Controls.Add(ctrl);
            }
            if(bll.TotalRowCount==0)
            {
                searchResults.Visible=false;
                plcCtrlPanel.Visible=false;
                plcShowServiceBox.Visible=true;
                lblResultInfo.Text="Der blev ikke fundet nogle resultater";
            }
            else
            {
                if(chosenGrouping==1)
                {
                    bindDropDownBox(cmbYdelser,bll.getYdelseList(),"VAERDI","MULIG");
                    cmbYdelser.SelectionMode=System.Web.UI.WebControls.ListSelectionMode.Multiple;
                    cmbYdelser.Rows=10;
                    plcShowServiceBox.Visible=true;
                    plcShowChooseAllAutomates.Visible=true;
                }
                else
                {
                    plcShowServiceBox.Visible=false;
                    plcShowChooseAllAutomates.Visible=false;
                }
                searchResults.Visible=true;
                plcCtrlPanel.Visible=true;
                lblResultInfo.Text="Resultater af søgningen:";
               
                manageImageButton(btnFirstPage,bll.firstPageButtonImage,bll.firstPageButtonDisabled);
                manageImageButton(btnFirstPage1,bll.firstPageButtonImage,bll.firstPageButtonDisabled);

                manageImageButton(btnBack,bll.backButtonImage,bll.backButtonDisabled);
                manageImageButton(btnBack1,bll.backButtonImage,bll.backButtonDisabled);
           
                manageImageButton(btnForward,bll.forwardButtonImage,bll.forwardButtonDisabled);
                manageImageButton(btnForward1,bll.forwardButtonImage,bll.forwardButtonDisabled);
           
                manageImageButton(btnLastPage,bll.lastPagePageButtonImage,bll.lastPageButtonDisabled);
                manageImageButton(btnLastPage1,bll.lastPagePageButtonImage,bll.lastPageButtonDisabled);
           
                lblPageOverview.Text=bll.pagingText;
                lblPageOverview1.Text=bll.pagingText;
           
                cmbPageJump.DataSource=bll.pageNumbers;
                cmbPageJump.DataBind();
                cmbPageJump.SelectedValue=bll.CurrentPage.ToString();
                cmbPageJump1.DataSource=bll.pageNumbers;
                cmbPageJump1.DataBind();
                cmbPageJump1.SelectedValue=bll.CurrentPage.ToString();
            }
        }
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:53 #22
den metoder bliver ikke kaldt fra eventhandleren...eller pageload.
Så den bliver altså ikke kaldt overhovedet når man har trykket på opret knappen..
Øjeblik. Sender dig lige hele klassen:
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:54 #23
Her er hele min klasse:


using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace vegasonline.UIL
{
    /// <summary>
    /// Summary description for overview.
    /// </summary>
    public class overview : GenericWebPage
    {
        /*Øverste paging knapper*/
        protected System.Web.UI.WebControls.ImageButton btnBack;
        protected System.Web.UI.WebControls.ImageButton btnForward;
        protected System.Web.UI.WebControls.ImageButton btnFirstPage;
        protected System.Web.UI.WebControls.ImageButton btnLastPage;
        protected System.Web.UI.WebControls.DropDownList cmbPageJump;
        /***********************************************************/

        /*Nederste paging knapper*/
        protected System.Web.UI.WebControls.ImageButton btnBack1;
        protected System.Web.UI.WebControls.ImageButton btnForward1;
        protected System.Web.UI.WebControls.ImageButton btnFirstPage1;
        protected System.Web.UI.WebControls.ImageButton btnLastPage1;
        protected System.Web.UI.WebControls.DropDownList cmbPageJump1;
        /***********************************************************/
        protected System.Web.UI.WebControls.Label lblPageOverview;
        protected System.Web.UI.WebControls.Label lblPageOverview1;
        protected System.Web.UI.WebControls.Label lblWishDateFromErr;
        protected System.Web.UI.WebControls.Label lblWishDateToErr;
        protected System.Web.UI.WebControls.Label lblOrderDateToErr;
        protected System.Web.UI.WebControls.Label lblOrderDateFromErr;
       
        //protected System.Web.UI.WebControls.CheckBox chkEdit;

        protected ForceUI.web.ForceTextbox sted_nr;
        protected ForceUI.web.ForceTextbox sted_adress;
        protected ForceUI.web.ForceTextbox sted_postnr;
        protected ForceUI.web.ForceTextbox automat_serialnumber;
        protected eWorld.UI.CalendarPopup order_wishDateFrom;
        protected eWorld.UI.CalendarPopup order_wishDateTo;
        protected eWorld.UI.CalendarPopup order_OrderDateFrom;
        protected eWorld.UI.CalendarPopup order_OrderDateTo;
       
        protected ForceUI.web.ForceDropDownBox cmbGrouping;

        protected ForceUI.web.ForceDropDownBox txtSted_navn;
        protected ForceUI.web.ForceDropDownBox automat_name;
        protected ForceUI.web.ForceDropDownBox automat_prgmVersion;
        protected System.Web.UI.WebControls.Button subSearch;
        protected System.Web.UI.WebControls.PlaceHolder searchResults;
        protected System.Web.UI.WebControls.Label lblResultInfo;


        protected ForceUI.web.ForceListBox cmbYdelser;
        protected System.Web.UI.WebControls.Button btnMakeQuickOrder;
        protected System.Web.UI.WebControls.PlaceHolder plcShowServiceBox;
        protected System.Web.UI.WebControls.PlaceHolder plcCtrlPanel;
        protected System.Web.UI.WebControls.PlaceHolder plcShowChooseAllAutomates;
        protected System.Web.UI.WebControls.PlaceHolder plcDynamicResults;

        protected string collapseName="";
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!this.IsPostBack)
            {
                plcCtrlPanel.Visible=false;
                plcShowServiceBox.Visible=false;
                plcShowChooseAllAutomates.Visible=false;
                bindDropDownBox(txtSted_navn,bll.getStedList((System.Data.DataTable)Session["userInfo"]),"VAERDI","MULIG");
                bindDropDownBox(automat_name,bll.getAutNavnList((System.Data.DataTable)Session["userInfo"]),"VAERDI","MULIG");
                bindDropDownBox(automat_prgmVersion,bll.getProgramVerList((System.Data.DataTable)Session["userInfo"]),"VAERDI","MULIG");
                cmbGrouping.Items.Add(new System.Web.UI.WebControls.ListItem("Sted","1"));
                cmbGrouping.Items.Add(new System.Web.UI.WebControls.ListItem("Bestilling","2"));
                Session["currentpage"]=1;
                Session["searchIsPostBack"]=true;
                if(Session["Bestillinger"]==null)
                    Session["Bestillinger"]=new System.Collections.ArrayList();
//                doPaging(); Start med tom søgning når denne er slået fra
            }
            plcDynamicResults.EnableViewState=true;
            cmbPageJump.AutoPostBack=true;
            cmbPageJump1.AutoPostBack=true;
        }
       
        private void subSearch_Click(object sender, EventArgs e)
        {
            bool temperr=false;
            if(!order_wishDateFrom.ValidDateEntered && order_wishDateFrom.PostedDate!="")
            {
                lblWishDateFromErr.Text="*("+order_wishDateFrom.PostedDate+")";
                temperr=true;
            }
            else
                lblWishDateFromErr.Text="";
            if(!order_wishDateTo.ValidDateEntered && order_wishDateTo.PostedDate!="")
            {
                lblWishDateToErr.Text="*("+order_wishDateFrom.PostedDate+")";
                temperr=true;
            }
            else
                lblWishDateToErr.Text="";
            if(!order_OrderDateFrom.ValidDateEntered && order_OrderDateFrom.PostedDate!="")
            {
                lblOrderDateFromErr.Text="*("+order_OrderDateFrom.PostedDate+")";
                temperr=true;
            }
            else
                lblOrderDateFromErr.Text="";
            if(!order_OrderDateTo.ValidDateEntered && order_OrderDateTo.PostedDate!="")
            {
                lblOrderDateToErr.Text="*("+order_OrderDateTo.PostedDate+")";
                temperr=true;
            }
            else
                lblOrderDateToErr.Text="";
            if(!temperr)
            {
                System.Collections.Hashtable commandTable=new System.Collections.Hashtable();
                commandTable.Add("sted_nr",sted_nr.Text);
                commandTable.Add("sted_adress",sted_adress.Text);
                commandTable.Add("sted_postnr",sted_postnr.Text);
                commandTable.Add("automat_serialnumber",automat_serialnumber.Text);
                commandTable.Add("order_wishDateFrom",order_wishDateFrom.PostedDate);
                commandTable.Add("order_wishDateTo",order_wishDateTo.PostedDate);
                commandTable.Add("order_OrderDateFrom",order_OrderDateFrom.PostedDate);
                commandTable.Add("order_OrderDateTo",order_OrderDateTo.PostedDate);
                commandTable.Add("txtSted_navn",txtSted_navn.SelectedValue);
                commandTable.Add("automat_name",automat_name.SelectedValue);
                commandTable.Add("automat_prgmVersion",automat_prgmVersion.SelectedValue);
                Session["searchTable"]=commandTable;
                Session["currentpage"]=1;
            }
            doPaging();
        }

        private System.Collections.Hashtable defaultSearchCriteria()
        {
            System.Collections.Hashtable searchTable=new System.Collections.Hashtable();
            searchTable.Add("sted_nr","");
            searchTable.Add("sted_adress","");
            searchTable.Add("sted_postnr","");
            searchTable.Add("automat_serialnumber","");
            searchTable.Add("order_wishDateFrom","");
            searchTable.Add("order_wishDateTo","");
            searchTable.Add("order_OrderDateFrom","");
            searchTable.Add("order_OrderDateTo","");
            searchTable.Add("txtSted_navn","-1");
            searchTable.Add("automat_name","-1");
            searchTable.Add("automat_prgmVersion","-1");
           
            return(searchTable);
        }


        private void manageImageButton(System.Web.UI.WebControls.ImageButton btn,string imgUrl,bool disabled)
        {
            btn.ImageUrl=imgUrl;
            if(disabled)
            {   
                btn.Attributes.Add("DISABLED","");
                btn.Visible=false;
            }
            else
            {
                btn.Attributes.Remove("DISABLED");
                btn.Visible=true;
            }
        }

        private void doPaging()
        {   
            if(Session["searchTable"]==null)
                Session["searchTable"]=defaultSearchCriteria();
            int chosenGrouping=Convert.ToInt32(cmbGrouping.SelectedValue);
            if(chosenGrouping==1)//Stedsortering
            {
                bll.PagingStedGrouping((int)Session["currentpage"],
                    50000,
                    (System.Collections.Hashtable)Session["searchTable"],
                    (System.Data.DataTable)Session["userInfo"]);
                collapseName="collapsetAutomatTable";
                System.Web.UI.Control ctrl=this.Page.LoadControl("sted_automat_linier.ascx");
                ctrl.ID="viewStedCtrl";
                ctrl.EnableViewState=true;
                plcDynamicResults.Controls.Add(ctrl);
            }
            else if(chosenGrouping==2)//Bestillingsortering
            {
                bll.PagingOrderGrouping((int)Session["currentpage"],
                    50000,
                    (System.Collections.Hashtable)Session["searchTable"],
                    (System.Data.DataTable)Session["userInfo"]);
                collapseName="collapseOrderLines";
                System.Web.UI.Control ctrl=this.Page.LoadControl("BestillingSted_Linier.ascx");
                ctrl.ID="viewOrderUserCtrl";
                ctrl.EnableViewState=true;
                plcDynamicResults.Controls.Add(ctrl);
            }
            if(bll.TotalRowCount==0)
            {
                searchResults.Visible=false;
                plcCtrlPanel.Visible=false;
                plcShowServiceBox.Visible=true;
                lblResultInfo.Text="Der blev ikke fundet nogle resultater";
            }
            else
            {
                if(chosenGrouping==1)
                {
                    bindDropDownBox(cmbYdelser,bll.getYdelseList(),"VAERDI","MULIG");
                    cmbYdelser.SelectionMode=System.Web.UI.WebControls.ListSelectionMode.Multiple;
                    cmbYdelser.Rows=10;
                    plcShowServiceBox.Visible=true;
                    plcShowChooseAllAutomates.Visible=true;
                }
                else
                {
                    plcShowServiceBox.Visible=false;
                    plcShowChooseAllAutomates.Visible=false;
                }
                searchResults.Visible=true;
                plcCtrlPanel.Visible=true;
                lblResultInfo.Text="Resultater af søgningen:";
               
                manageImageButton(btnFirstPage,bll.firstPageButtonImage,bll.firstPageButtonDisabled);
                manageImageButton(btnFirstPage1,bll.firstPageButtonImage,bll.firstPageButtonDisabled);

                manageImageButton(btnBack,bll.backButtonImage,bll.backButtonDisabled);
                manageImageButton(btnBack1,bll.backButtonImage,bll.backButtonDisabled);
           
                manageImageButton(btnForward,bll.forwardButtonImage,bll.forwardButtonDisabled);
                manageImageButton(btnForward1,bll.forwardButtonImage,bll.forwardButtonDisabled);
           
                manageImageButton(btnLastPage,bll.lastPagePageButtonImage,bll.lastPageButtonDisabled);
                manageImageButton(btnLastPage1,bll.lastPagePageButtonImage,bll.lastPageButtonDisabled);
           
                lblPageOverview.Text=bll.pagingText;
                lblPageOverview1.Text=bll.pagingText;
           
                cmbPageJump.DataSource=bll.pageNumbers;
                cmbPageJump.DataBind();
                cmbPageJump.SelectedValue=bll.CurrentPage.ToString();
                cmbPageJump1.DataSource=bll.pageNumbers;
                cmbPageJump1.DataBind();
                cmbPageJump1.SelectedValue=bll.CurrentPage.ToString();
            }
        }

        #region pagingEvents
        private void btnBack_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            Session["currentpage"]=((int)Session["currentpage"])-1;
            doPaging();
        }

        private void btnForward_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            int newPage=((int)Session["currentpage"])+1;
            Session["currentpage"]=newPage;
            doPaging();
        }

        private void btnFirstPage_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            Session["currentpage"]=1;
            doPaging();
        }

        private void btnLastPage_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            Session["currentpage"]=-1;
            doPaging();
            Session["currentpage"]=bll.TotalPages;
        }

        private void cmbPageJump_SelectedIndexChanged(object sender, EventArgs e)
        {
            int newPage=Convert.ToInt32(cmbPageJump.SelectedValue);
            Session["currentpage"]=newPage;
            doPaging();
           
        }
        #endregion


        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);

            /*Øverste paging knapper*/
            btnBack.Click+=new System.Web.UI.ImageClickEventHandler(btnBack_Click);
            btnForward.Click+=new System.Web.UI.ImageClickEventHandler(btnForward_Click);
            btnFirstPage.Click+=new System.Web.UI.ImageClickEventHandler(btnFirstPage_Click);
            btnLastPage.Click+=new System.Web.UI.ImageClickEventHandler(btnLastPage_Click);
            cmbPageJump.SelectedIndexChanged+=new EventHandler(cmbPageJump_SelectedIndexChanged);
            /***********************************************************/

            /*Nederste paging knapper*/
            btnBack1.Click+=new System.Web.UI.ImageClickEventHandler(btnBack_Click);
            btnForward1.Click+=new System.Web.UI.ImageClickEventHandler(btnForward_Click);
            btnFirstPage1.Click+=new System.Web.UI.ImageClickEventHandler(btnFirstPage_Click);
            btnLastPage1.Click+=new System.Web.UI.ImageClickEventHandler(btnLastPage_Click);
            cmbPageJump1.SelectedIndexChanged+=new EventHandler(cmbPageJump_SelectedIndexChanged);
            /***********************************************************/

            subSearch.Click+=new EventHandler(subSearch_Click);
            btnMakeQuickOrder.Click+=new EventHandler(btnMakeQuickOrder_Click);
        }
        #endregion

        private void btnMakeQuickOrder_Click(object sender, EventArgs e)
        {
            //vegasonline.UIL.sted_automat_bestilling tmpCtrl=(vegasonline.UIL.sted_automat_bestilling)this.Page.LoadControl("sted_automat_linier.ascx");
            //tmpCtrl.getRepeater()
            vegasonline.UIL.sted_automat_bestilling tmpCtrl=(vegasonline.UIL.sted_automat_bestilling)plcDynamicResults.FindControl("viewStedCtrl");
            Response.Write("order created:"+tmpCtrl.getRepeater().Items.Count);
        }
    }
}
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 14:55 #24
Nederst ses eventhandleren til knappen der skal oprette bestillingerne...
Avatar billede snepnet Nybegynder
12. marts 2005 - 14:58 #25
nej... dynamisk tilføjede kontroller skal tilføjes hver gang, men der findes komponenter du kan download gratis der hjælper med at "huske" de dynamisk indsatte kontroller - jeg finder lige et link her bagefter :
Såhh... tilføjer du dem ikke hver gang, vil du heller ikke kunne finde dem igen.
mvh
Avatar billede snepnet Nybegynder
12. marts 2005 - 15:00 #26
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:01 #27
hmmm kan det ikke omgås på anden måde end at hente et tredjeparts?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:03 #28
kan jeg ikke bare kalde load control fra eventhandleren?
Avatar billede snepnet Nybegynder
12. marts 2005 - 15:16 #29
det kan ikke rigtig omgås ved andet end at du sætter kontrollerne ind hver gang.... du skal vel også se dem efter et roundtrip går jeg ud fra ?
mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:25 #30
Mmm nej for da skal jeg til en anden side hvor brugeren kan bekræftige at hans bestilling er korrekt
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:26 #31
Men okay...lad os så sige jeg loader den control igen i min eventhandler.
Kan jeg så få fat i de checkboxes der er hakket af?
Avatar billede snepnet Nybegynder
12. marts 2005 - 15:28 #32
sorry.... det forstod jeg ikke lige.
hvad er problemet i at sætte dem ind hver gang ?
mvh
Avatar billede snepnet Nybegynder
12. marts 2005 - 15:34 #33
men nej - du kan ikke få fat i de checkboxe der er hakket af programmatisk hvis du loader en ny kontrol i din eventhandler.
det vil jo bare være en ny instans af samme kontroltype - som aldrig er blevet renderet til brugeren.
men ... jeg forstår stadig ikke helt hvorfor du ikke bare loader dem hver gang ?
mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:35 #34
ALtså problemet er at det er en side hvor brugeren får en oversigt over alle hans automater.
Han kan så hurtige oprette en bestilling på disse automater ved at hakke af i "vælg alle" checkboksen.
Herefter trykker han på "opret bestilling" knappen hvorefter han skal ind på en side hvor alle disse bestillingslinier(1 for hver automat" bliver vist for ham således at han har mulighed for at bekræftige sin bestilling.
Det er altså ikke den samme side der skal loades igen...
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:37 #35
Men om jeg skriver
System.Web.UI.Control ctrl=this.Page.LoadControl("sted_automat_linier.ascx"); i dopaging() eller om jeg skriver det i eventhandleren. Kommer det ikke ud på et?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 15:37 #36
hvis den skal loades hver gang skal jeg jo så kalde doPaging() hver gang....
Avatar billede snepnet Nybegynder
12. marts 2005 - 15:50 #37
det kommer bestemt ikke ud på ét....

siden bliver loaded på serveren når brugeren "rammer" siden - enten ved at gå ind på den - eller ved at eksekvere et postback på den ene eller den anden måde

hele kontroltræet bliver sat op for dig hver gang, og udfra kontroller, viewstate, formcontent mv. vil du efter load få eksekveret dine eventhandlers.
i dit tilfælde skal handleren så samle op hvilke checkboxe der er hakket af - og viderestille til en anden siden.
hvis du ikke sætter dine kontroller op hver gang - vil de simpelthen ikke eksistere når din eventhandler eksekveres.
og hvis du undlader at viderestille - men bare viser siden igen, vil dine dynamisk loadede kontroller slet ikke optræde.

prøv at se dette eksempel :

private void Page_Load(object sender, System.EventArgs e)
{           
    Button btn = new Button();
    btn.Text = "Button1";
    btn.Click += new EventHandler(btn_Click1);
    Form1.Controls.Add(btn);
}

private void btn_Click1(object sender, EventArgs e)
{
    Response.Write("Der er klikket på knap1");
    Button btn = new Button();
    btn.Text = "Button2";
    btn.Click += new EventHandler(btn_Click2);
    Form1.Controls.Add(btn);
}

private void btn_Click2(object sender, EventArgs e)
{
    Response.Write("Der er klikket på knap2");
}

1) i page_laod sættes der en knap ind på formen, og der abbonneres på click-eventet.
2) knappen bliver vist i browseren hos klienten, og brugeern klikker på den, og eksekverer et postback.
3) på serveren sættes knappen op i kontroltræet på ny (i page_load) - og der abboneres på eventet.
4) eventhandleren eksekveres - og der indsættes endnu en knap.
5) brugeren trykker på denne nye knap og eksekverer et postback.
6) pageload køres, og den første knap sættes ind i kontroltræet.

Og mere sker der ikke her....
Knap nummer 2 bliver aldrig sat ind - da dette kun sker i eventhandleren for knap1-klikket.... og i og med at knap2 ikke bliver sat ind - kan det heller ikke udledes at der er trykket på den.
knap2's eventhandler vil du derfor aldrig nogensinde kunne få kørt ved ovenstående kode.

hvis du ikke er med på det - må du endelig spørge.... kig eventuelt her :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcontrolexecutionlifecycle.asp

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:07 #38
Hmm jeg kan ikke få de checkboxes ud.

Hvordan vil du foreslå jeg gør?
Jeg kalder doPaging() i pageLoad eller hvordan ?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:10 #39
Jeg er lidt desperat da jeg skal være færdig med det her på mandag nemlig....Så håber det er okay jeg spørger så meget
Avatar billede snepnet Nybegynder
12. marts 2005 - 16:10 #40
du skal kalde det der er nødvendigt, for at du få genskabt dit kontroltræ på serveren som det så ud da det blev renderet til klienten.
mvh
Avatar billede snepnet Nybegynder
12. marts 2005 - 16:12 #41
(og i dit tilfælde - senest i page_load)
mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:17 #42
hmm problemet er også at jeg først kan få fat i data efter de er renderet...da det jo er en nested repeater.
Så jeg fylder data i repeateren efterhånden som der bliver præprocesseret.

Kan jeg på en måde få fat i repeateren efter den er blevet rendereret?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:19 #43
så hvis jeg gør således i codebehind til min usercontrol får jeg object not set to reference da jeg jo først fylder childrepeater op efterhånden

public class sted_automat_bestilling : GenericUserControl
    {
        protected System.Web.UI.WebControls.Repeater parentRepeater;
        protected System.Web.UI.WebControls.Repeater childRepeater;
        protected System.Web.UI.WebControls.Repeater grandchildRepeater;
        protected System.Web.UI.WebControls.CheckBox chkMakeOrder;
        private void Page_Load(object sender, System.EventArgs e)
        {
           
            this.bll=(BLL.BusinessLogic.BusinessLogic)((UIL.overview)this.Parent.Parent.Parent.Parent).BusinessLayer;
            parentRepeater.DataSource = bll.businessData.Tables["steder"];
            parentRepeater.DataBind();
           
            foreach(RepeaterItem ri in childRepeater.Items)
            {
                //CheckBox cb=(CheckBox)ri.FindControl("chkMakeOrder");
                Response.Write(ri.GetType()+"<br>");
            }
           
        }
        public System.Web.UI.WebControls.Repeater getRepeater()
        {return childRepeater;}

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    }
}
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:28 #44
Jeg poster også lige koden for ascx filen...Så er det nemmere at se helheden :)
Mange tak for din hjælp snep...Du skal nok få en ordentlig slat point hehe

<%@ Control Language="c#" AutoEventWireup="false" Codebehind="sted_automat_linier.ascx.cs" Inherits="vegasonline.UIL.sted_automat_bestilling" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<table bordercolor=black border=1 cellspacing=0 cellpadding=2 id="tree"> <!--style="BACKGROUND-COLOR:#f1f1f1;BORDER-RIGHT: black thin solid; BORDER-BOTTOM: black thin solid; BORDER-LEFT: black thin solid"-->
<asp:repeater id="parentRepeater" runat="server" enableviewstate=true>
  <itemtemplate>
            <!--<div style="BORDER-RIGHT: black thin solid; BORDER-TOP: black thin solid; BORDER-BOTTOM-WIDTH: thin; BORDER-LEFT: black thin solid">-->
                <tr bgcolor=<%=vegasonline.Global.stedRowColor%> id="<%# ParentCtr%>">
                    <td>
                        <img src="images/+.bmp" style="cursor:hand;" onclick="collapseit(<%# DataBinder.Eval(Container.DataItem,"STED_NR") %>,'collapsetAutomatTable','ALTERNATING')" id="collapseimg<%# DataBinder.Eval(Container.DataItem,"STED_NR") %>">
                    </td>
                    <td style="FONT-SIZE: 14px" colspan=7 nowrap>
                        <b>
                        <i><%# DataBinder.Eval(Container.DataItem,"STED_NAVN") %></i>&nbsp;&nbsp;&nbsp;
                        <%# DataBinder.Eval(Container.DataItem,"STED_ADRESSE") %>&nbsp;,
                        <%# DataBinder.Eval(Container.DataItem,"POSTBY") %>&nbsp;
                        <%# DataBinder.Eval(Container.DataItem,"POSTNR") %>
                        </b>
                   
                    <td nowrap align=right colspan=2>
                        <a href="StedManage.aspx?stednr=<%# DataBinder.Eval(Container.DataItem,"STED_NR") %>&action=rediger">Redigér</a>
                        <a href="StedBestilling.aspx?stednr=<%# DataBinder.Eval(Container.DataItem,"STED_NR") %>&action=quickOrder">Opret Bestilling</a>
                    </td>
                   
                </tr>
           
            <!--</div>-->
            <TBODY id="collapsetAutomatTable<%# DataBinder.Eval(Container.DataItem,"STED_NR") %>" style="display:none;">
           
            <asp:repeater id="childRepeater" enableviewstate=true
                    datasource='<%# GetRelation(Container.DataItem,"sted_automat_relation") %>'
                    runat="server">
                <HeaderTemplate>
                    <tr bgcolor=<%=vegasonline.Global.OverskriftAutomatColor%> id="<%#getCurrentParent()%>.<%#ChildCtr%>" style="color:FFFFFF;">
                            <td>&nbsp;</td>
                            <td>
                                <b>Automatnavn</b>
                            </td>
                            <td>
                                <b>Serienr</b>
                            </td>
                            <td>
                                <b>Automattype</b>
                            </td>
                            <td>
                                <b>Kabinet</b>
                            </td>
                            <td>
                                <b>Elektronik</b>
                            </td>
                            <td>
                                <b>Program version</b>
                            </td>
                            <td>
                                <b>Fabrikat</b>
                            </td>
                            <td>
                                &nbsp;
                            </td>
                            <td>
                                Bestilling
                            </td>
                    </tr>
                </HeaderTemplate>
                <itemtemplate>
               
                <!--<div style="BORDER-RIGHT: black thin solid; BORDER-TOP: black thin solid; BORDER-BOTTOM-WIDTH: thin; BORDER-LEFT: black thin solid">-->
                        <tr bgcolor=<%=vegasonline.Global.automatRowColor%> id="<%#getCurrentParent()%>.<%#ChildCtr%>">
                            <td>
                                &nbsp;
                            </td>
                            <td>
                                <%# DataBinder.Eval(Container.DataItem,"[\"AUT_NAVN\"]") %>&nbsp;
                            </td>
                            <td>   
                                <%# DataBinder.Eval(Container.DataItem,"[\"AUT_SER_NR\"]") %>&nbsp;
                            </td>
                            <td>
                                <%# DataBinder.Eval(Container.DataItem,"[\"AUT_ART_NAVN\"]") %>&nbsp;
                            </td>
                            <td>
                                <%# DataBinder.Eval(Container.DataItem,"[\"KAB_BETEGN\"]") %>&nbsp;
                            </td>
                            <td>
                                <%# DataBinder.Eval(Container.DataItem,"[\"ELKTR_BETEGN\"]") %>&nbsp;
                            </td>
                            <td>
                                <%# DataBinder.Eval(Container.DataItem,"[\"PROG_VERS\"]") %>&nbsp;
                            </td>
                            <td>
                                <%# DataBinder.Eval(Container.DataItem,"[\"FABR_BETEGN\"]") %>&nbsp;
                            </td>
                            <td nowrap>
                                <a href="AutomatManage.aspx?autonr=<%# DataBinder.Eval(Container.DataItem,"[\"AUT_NR\"]") %>&action=rediger">Redigér</a>
                            </td>
                            <td align=center>
                                <input type=checkbox name="chkOrderLine<%# DataBinder.Eval(Container.DataItem,"[\"AUT_SER_NR\"]") %>" id="chkOrderLine<%# DataBinder.Eval(Container.DataItem,"[\"AUT_SER_NR\"]") %>"/>
                            </td>
                        </tr>
                    <!--</div>-->
                </itemtemplate>
            </asp:repeater>
    </tbody><!--Afslutter 1 sted, bruges til collapse af automater-->
  </itemtemplate>
</asp:repeater>
</table>
Avatar billede snepnet Nybegynder
12. marts 2005 - 16:31 #45
du kan få fat i repeateren efter den er blevet oprettet - og til objektet er nedlagt på serveren - hvilket først sker efter renderingen.

hvor får du en null-reference ?

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:44 #46
foreach(RepeaterItem ri in childRepeater.Items)
            {
                //CheckBox cb=(CheckBox)ri.FindControl("chkMakeOrder");
                Response.Write(ri.GetType()+"<br>");
            }

Det er i denne løkke jeg får min null pointer exception...
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:44 #47
i asc.cs klassen
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:44 #48
ascx.cs skulle der stå :)
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 16:48 #49
Som jeg ser det er det det eneste sted jeg kan få mine checkboxes ud ik sandt?
Avatar billede snepnet Nybegynder
12. marts 2005 - 17:06 #50
selvom du så fik fat i dem der har du ikke meget at bruge dem til ... de vil ikke indeholde andet end det det bliver initialiseret med. hvis brugeren har hakket nogle af mv - vil du ikke kunne se det der.

prøv sådan her :

private void Page_Load(object sender, System.EventArgs e)
{
  if(!IsPostBack)
  {           
    this.bll=(BLL.BusinessLogic.BusinessLogic)((UIL.overview)this.Parent.Parent.Parent.Parent).BusinessLayer;
    parentRepeater.DataSource = bll.businessData.Tables["steder"];
    parentRepeater.DataBind();
  }
}

du kan så lave dig en metode som giver dig adgang til dine checked items på samme klasse :

public ListItemCollection GetCheckedItems()
{
  ListItemCollection checkedItems = new ListItemCollection();
  foreach(ListItem li in childRepeater.Items)
  {
    CheckBox cb = (CheckBox)li.FindControl(checkboxId);
    if(cb.Checked)
      checkedItems.Add(li);
    return checkedItems;
  }
}

på din side hvor du så skal bruge oplysnigerne - kan du få en reference til din brugerkontrol - og hente dine checkedItems.

dette vil du kunne gøre i en eventhandler for et knapklik på siden ell....

hvis du kan levere en enkel måde hvorpå jeg kan få projektet op at køre hos mig (f.eks. en pakket solution og en databasefil) vil jeg gerne kigge på det.

så kan du lige smide en mailadresse jeg kan skrive til.

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 17:19 #51
Li does not contain a definition for find control....fortæller den mig...

Altså ListItem har ikke en FindControl metode...hvad kalder jeg så istedet?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 17:21 #52
hmmm problemet er at det kører i en oraclebase...med blandt andet et større view og sådan lidt forskelligt...Det er lidt svært at portere tror jeg...Desværre...Ville ellers have været klart det nemmeste
Avatar billede snepnet Nybegynder
12. marts 2005 - 17:26 #53
det er mig der sidder og kludrer - sorry (har selv lidt småtravlt :oD) ... det skal self. være hhv. RepeaterItem, og RepeaterItemCollection.
mvh
Avatar billede snepnet Nybegynder
12. marts 2005 - 17:29 #54
arh... det kan man muligvis ikke - sig lige til hvis du skal bruge et workaround.
mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 17:33 #55
til tror jeg....Jeg kan stadig ikke se hvordan jeg kan skulle få fat i mit usercontrolobjekt ude i den aspx fil hvor jeg skal bruge de checked items...

Desuden skal jeg jo være sikker på at den childrepeater eksisterer når jeg kalder GetCheckedItems()...childrepeater eksisterer jo først når jeg begynder at præprocessere parentrepeateren ik? Eller har jeg misforstået?

mvh
Avatar billede snepnet Nybegynder
12. marts 2005 - 17:37 #56
hmmm.... jeg tror der er nogle ting du skal checke op på ved det link jeg sendte (vedrørende control lifecycle).

jeg kan godt lave et principielt eksempel til dig - men du kommer lige til at vente lidt så ;o)

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 17:50 #57
Okay.nu tror jeg at jeg har fået noget frem her langt om længe.
Jeg kan nu skrive de checkboxes ud der er valgt.
Problemet er at jeg ved ikke hvilken række de kommer fra.
Er der en smart måde hvorved jeg kan identificere denne checkbox?
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 17:54 #58
Grunden til at jeg spørger er fordi at når jeg beder den om at skrive checked ud får jeg for de checkboxes der er checked at den kriver dens ID ud

searchResults:parentRepeater:_ctl6:childRepeater:_ctl3:chkMakeOrder

Men jeg kunne godt tænke mig at binde et serienummer fast på den således at jeg ved hvad det er for en checkbox...
Avatar billede snepnet Nybegynder
12. marts 2005 - 18:05 #59
ok .... du kan lige se dette lille eksempel :

// RepeaterSager.aspx
<%@ Page language="c#" Codebehind="RepeaterSager.aspx.cs" AutoEventWireup="false" Inherits="EXP2.RepeaterSager" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>RepeaterSager</title>
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <P><asp:repeater id="Repeater1" runat="server">
                    <ItemTemplate>
                        <asp:Label ID="lblName" Runat="server">
                        Parent : <%# DataBinder.Eval(Container, "DataItem.FldString") %>
                    </asp:Label>
                        <br>
                        <asp:Repeater ID="ChildRepeater" Runat="server">
                            <ItemTemplate>
                                <asp:Label ID="Label1" Runat="server">
                                Child : <%# DataBinder.Eval(Container, "DataItem.FldString") %>
                            </asp:Label>
                                <asp:CheckBox ID="chkChildCheck" Runat="server"></asp:CheckBox>
                            </ItemTemplate>
                            <SeparatorTemplate>
                                <br>
                            </SeparatorTemplate>
                        </asp:Repeater>
                        <br>
                    </ItemTemplate>
                    <SeparatorTemplate>
                        <hr>
                    </SeparatorTemplate>
                </asp:repeater><BR>
                <asp:Button id="btnGetSelectedInnerItems" runat="server" Text="GetSelectedInnerItems"></asp:Button></P>
        </form>
    </body>
</HTML>

// og en code-behind
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using ExpArticles.ExpData;

namespace EXP2
{
    public class RepeaterSager : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Repeater Repeater1;
        protected System.Web.UI.WebControls.Button btnGetSelectedInnerItems;
        protected System.Web.UI.WebControls.Repeater ChildRepeater;

        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
            {
                SampleDataSet ds = new ExpArticles.ExpData.ExpDataAccess().GetSampleData(5);
                Repeater1.DataSource = ds;
                DataBind();   
            }
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);
            this.btnGetSelectedInnerItems.Click += new System.EventHandler(this.btnGetSelectedInnerItems_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }

        private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
        {
            object dataItem = e.Item.DataItem;
            Repeater rep = (Repeater)e.Item.FindControl("ChildRepeater");
            if(rep != null)
            {
                rep.DataSource = GetChildData();
                rep.DataBind();           
            }           
        }

        protected DataSet GetChildData()
        {
            return new ExpArticles.ExpData.ExpDataAccess().GetSampleData(2);
        }

        private void btnGetSelectedInnerItems_Click(object sender, System.EventArgs e)
        {
            foreach(RepeaterItem item in this.Repeater1.Items)
            {
                Repeater innerRepeater = (Repeater)item.FindControl("ChildRepeater");
                foreach(RepeaterItem innerItem in innerRepeater.Items)
                {
                    CheckBox innerCheckBox = (CheckBox)innerItem.FindControl("chkChildCheck");
                    if(innerCheckBox.Checked)
                    {
                        Response.Write(String.Format("InnerCheckBox Checked on {0},{1}<br>", item.ItemIndex, innerItem.ItemIndex));
                    }
                }
            }
        }
    }
}

du kan godt få klassen der genererer eksempeldata hvis du skulle få brug for den.

håber du kan se nogle principper i det...

du kan binde ekstra information på en given kontrol på forskellige måder, men en ganske enkel kunne være denne :
someControl.Attributes.Add("SpecialAttribute", "someValue");

du kan så efterfølgende self. også hente den igen med :
string someValue = someControl.Attributes["SpecialAttribute"].ToString();

(men den ryger nok ikke igennem en html-validator så ;o)

men ... når du nu alligevel har et repeateritem i hånden - kan du jo bare skrive din ekstra info i et skjult felt på dit repeateritem.... så kan du jo altid gafle det derfra igen.

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 18:27 #60
men ... når du nu alligevel har et repeateritem i hånden - kan du jo bare skrive din ekstra info i et skjult felt på dit repeateritem.... så kan du jo altid gafle det derfra igen.

Hvad mener du helt præcist spørger jeg nok lidt dumt :)
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 18:27 #61
Kan du gi et lille hurtigt eks?
Avatar billede snepnet Nybegynder
12. marts 2005 - 18:59 #62
du kan f.eks. udvide din repeater til at se sådan her ud :

<asp:repeater id="Repeater1" runat="server">
    <ItemTemplate>
        <input id="HiddenField" type="hidden" runat="server" />
        <asp:Label ID="lblName" Runat="server">
        Parent : <%# DataBinder.Eval(Container, "DataItem.FldString") %>
    </asp:Label>
        <br>
        <asp:Repeater ID="ChildRepeater" Runat="server">
            <ItemTemplate>
                <asp:Label ID="Label1" Runat="server">
                Child : <%# DataBinder.Eval(Container, "DataItem.FldString") %>
            </asp:Label>
                <asp:CheckBox ID="chkChildCheck" Runat="server"></asp:CheckBox>
            </ItemTemplate>
            <SeparatorTemplate>
                <br>
            </SeparatorTemplate>
        </asp:Repeater>
        <br>
    </ItemTemplate>
    <SeparatorTemplate>
        <hr>
    </SeparatorTemplate>
</asp:repeater>

og itemdatabound-handleren :
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater rep = (Repeater)e.Item.FindControl("ChildRepeater");
        rep.DataSource = GetChildData();
        rep.DataBind();       
        HtmlInputHidden hiddenField = (HtmlInputHidden)e.Item.FindControl("HiddenField");
        hiddenField.Value = "im hidden";
    }
}

og buttonclick-handleren:
private void btnGetSelectedInnerItems_Click(object sender, System.EventArgs e)
{
    foreach(RepeaterItem item in this.Repeater1.Items)
    {
        HtmlInputHidden hiddenfield = (HtmlInputHidden)item.FindControl("HiddenField");
        Response.Write(String.Format("HiddenFieldValue is {0}<br>", hiddenfield.Value));
        Repeater innerRepeater = (Repeater)item.FindControl("ChildRepeater");
        foreach(RepeaterItem innerItem in innerRepeater.Items)
        {
            CheckBox innerCheckBox = (CheckBox)innerItem.FindControl("chkChildCheck");
            if(innerCheckBox.Checked)
            {
                Response.Write(String.Format("InnerCheckBox Checked on {0},{1}<br>", item.ItemIndex, innerItem.ItemIndex));
            }
        }
    }
}

men det behøver jo ikke være et hiddenfield..... den kan bare være en alm. asp:textbox - som du sætter visible=false på.

mvh
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 19:08 #63
Ja det kan jeg godt se det smarte i...Men problemet er at det hiddenfelt jeg skal bruge ligger inde i childrepeateren.
Det er et problem da jeg får en exception når jeg prøver at binde itemboundeventet op på childrepeateren i initializeCoponent fordi den ikke er lavet endnu. Jeg får altså en nullpointerexception.
Skal jeg binde eventet op et andet sted?
Avatar billede snepnet Nybegynder
12. marts 2005 - 19:34 #64
jeps - bare følge modellen ned igennem :

private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater innerRepeater = (Repeater)e.Item.FindControl("ChildRepeater");
        innerRepeater.DataSource = GetChildData();
        innerRepeater.ItemDataBound += new RepeaterItemEventHandler(innerRepeater_ItemDataBound);
        innerRepeater.DataBind();       
        HtmlInputHidden hiddenField = (HtmlInputHidden)e.Item.FindControl("HiddenField");
        hiddenField.Value = "im hidden";
    }
}

// og en handler :
private void innerRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Response.Write("InnerRepeater_DataBound<br>");
}

hvor du så også har adgang til dit item, hvor du kan lave en findcontrol osv.

mvh
(jeg bliver nødt til at løbe nu - men jeg er tilbage senere, og skal nok se efter om du har skrevet).
Avatar billede forceprogrammer Nybegynder
12. marts 2005 - 19:51 #65
okay. Tak for det snepnet...

Jeg har lige fundet ud af at det ikke virker alligevel :/

Den siger bare at alle checkboxes er false...Ved ikke lige hvad jeg gør galt. Synes jeg har gjort præcis som du har sagt.
Avatar billede snepnet Nybegynder
12. marts 2005 - 23:52 #66
hej igen - jeg kom lidt senere hjem end jeg havde regnet med.
hvis du bygger det op som det jeg har sendt - skulle det ikke så gerne kikse... men der kan jo altid være noget der driller.
er du kommet videre med det siden du skrev 19:51 ?
mvh
Avatar billede forceprogrammer Nybegynder
13. marts 2005 - 06:41 #67
Hej Snep :)
Jeg fik det til at virke. It aint pretty but it works hehe.....Lavede en lappeløsning....Så nu virker det da i det mindste...
Det viser sig at den kun medsender de checkboxes i postback som er hakket af. Til gengæld medsender den alle hidden felter.
Den bruger en navnekonvention som jeg udnyttede således at ved at fjerne ID
Den laver noget ala
repeater1navn1:repeater2navn1:checkboxID
Så jeg kan ved at fjerne ID fra navnet og udskifte det med ID fra hiddenfeltet identificere hvilket hiddenfelt der hører til hvilken checkbox.

Som sagt det er ikke pænt...Men der er ikke så meget tid til finesser lige nu hehe.
Så nu er jeg gået videre til nye problemer :)
Men tusinde tak for hjælpen snepnet. Det har været meget nyttigt. DU har fortjent pointene og mange til.
Smid et svar og hvis du vil have flere sig sig til.
Så opretter jeg bare en ny tråd.
Nå, men jeg vender nok snart tilbage :P
Vi ses
Avatar billede snepnet Nybegynder
13. marts 2005 - 13:01 #68
hej igen force - du får et svar her, men jeg regner med at høre fra dig igen ;o)
fedt at du fik det fikset til mandags-aflevering.
vi skrives ved
mvh
Avatar billede forceprogrammer Nybegynder
13. marts 2005 - 13:03 #69
Det er accepteret :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester