回发时Asp.net中继器数据绑定

回发时Asp.net中继器数据绑定,asp.net,vb.net,postback,repeater,Asp.net,Vb.net,Postback,Repeater,供将来参考的解决方案 问题是“tecnico”变量在每次回发时变为0,为了避免任何问题,我去掉了全局变量data1和data2,并将它们移动到Bindrepeater例程中,如下所示: Dim data1, data2 As DateTime If Len(ViewState("dataDa")) = 0 Then data1 = GetDayFromWeek(Date.Today, DayOfWeek.Monday) data2

供将来参考的解决方案

问题是“tecnico”变量在每次回发时变为0,为了避免任何问题,我去掉了全局变量data1和data2,并将它们移动到Bindrepeater例程中,如下所示:

 Dim data1, data2 As DateTime
        If Len(ViewState("dataDa")) = 0 Then
            data1 = GetDayFromWeek(Date.Today, DayOfWeek.Monday)
            data2 = GetDayFromWeek(Date.Today, DayOfWeek.Sunday)
            ViewState("dataDa") = data1
            ViewState("dataA") = data2
        Else
            data1 = Date.ParseExact(ViewState("dataDa"), "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
            data2 = Date.ParseExact(ViewState("dataA"), "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
        End If
原始问题

我在页面加载时遇到了中继器数据绑定问题。我会制作一种每周日历,这样中继器应该显示日期,而嵌套的中继器应该显示每天的约会。我制作了一个简单的周选择器,带有一个“上一周/下一周”按钮,可以在周中移动。它在第一页加载时工作正常,但当我使用按钮更改活动周时,它不会显示任何内容。 我知道问题肯定是回发,但我无法回避这个问题。。。有什么帮助吗

html:


--%>

代码:

导入System.Data.SqlClient
进口系统.全球化
公共类日历
继承System.Web.UI.Page
Dim data1、data2作为日期时间
Dim tecnico作为整数
暗中尉
公共函数GetDayFromWeek(周作为DateTime,天作为DayOfWeek)作为DateTime
Dim startDay As DayOfWeek=System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek
“获得本周的开始
Dim diff As Integer=CInt(星期一至星期五)-CInt(开始日期)
Dim beginingOfWeek As DateTime=周。添加天数(差异*-1)
“得到我们想要的那一天
差异=分钟(日)-分钟(开始日)
如果差值<0,则
差异=7-辛特(起始日)
如果结束
返回开始周添加天数(差异)
端函数
公共函数datasql(ByVal dataini作为日期)作为字符串
返回dataini.Year&“-”&dataini.Month&“-”&dataini.Day
端函数
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
如果不是的话,我会回来的
加共体
Dim monday=GetDayFromWeek(Date.Today,DayOfWeek.monday)
Dim sunday=GetDayFromWeek(Date.Today,DayOfWeek.sunday)
hdnDa.Value=星期一
hdnA.Value=sunday
litData.Text=星期一和星期日
Dim dbVulcano作为新的dbVulcano实体
data1=Date.ParseExact(星期一,“dd/MM/yyyy”,CultureInfo.CreateSpecificCulture(“en-US”)。日期
data2=Date.ParseExact(星期日,“dd/MM/yyyy”,CultureInfo.CreateSpecificCulture(“en-US”)。日期
tecnico=会话(“idutete”)
utente=dbVulcano.Utenti.Where(函数(u)u.Idente=tecnico).单个
如果结束
BindRepeater()
端接头
专用子转发器()
Dim constr As String=ConfigurationManager.ConnectionString(“DBVulcanConnectionString”).ConnectionString
Dim query As String=“选择distinct(statoRic.DataAss)作为数据
从静止的
内连接
(Richieste内部连接客户端)
On clienti.IDCliente=Richieste.RFCliente)
在StatoRic.RFRic=Richieste.IDRic上
加入尤蒂蒂
关于utinti.idute=StatoRic.RFTecnico
其中(RFStato=11或RFStato=12或RFStato=13或RFStato=41)和Attuale=1,StatoRic.DataAss不为null,StatoRic.DataAss介于@data1和@data2之间,RFTecnico=@tecnico
按statoRic.DATASS分组按statoRic.DATASS asc排序”
使用con作为新的SqlConnection(cont)
使用cmd作为新的SqlCommand(query,con)
cmd.Parameters.AddWithValue(“@data1”,data1)
cmd.Parameters.AddWithValue(“@data2”,data2)
cmd.Parameters.AddWithValue(“@tecnico”,tecnico)
将sda用作新的SqlDataAdapter(cmd)
Dim dt作为新数据表()
sda.填充(dt)
rptParent.DataSource=dt
rptParent.DataBind()
终端使用
终端使用
终端使用
端接头
私有子RPTPRENT_ItemDataBound(发送方作为对象,e作为RepeaterItemEventArgs)处理RPTPRENT.ItemDataBound
如果(e.Item.ItemType=ListItemType.Item或e.Item.ItemType=ListItemType.AlternatingItem),则
Dim childRepeater As Repeater=e.Item.FindControl(“rptAppuntamenti”)
Dim lblDate As Label=e.Item.FindControl(“lblDate”)
'Dim lblTecnico As Label=e.Item.FindControl(“lblTecnico”)
Dim数据为DateTime=Date.ParseExact(lblDate.Text,“dd/MM/yyyy”,CultureInfo.CreateSpecificCulture(“en-US”)).Date
'lblTecnico.Text=utete.nomext
Dim constr As String=ConfigurationManager.ConnectionString(“DBVulcanConnectionString”).ConnectionString
Dim query As String=“Select statoric.id,(当clienti.IDCliente=796然后richieste.descr else clienti.RagSociale end时为大小写)作为RagSociale,CAST(statoric.DataAss As DATE)+ISNULL(CONVERT(datetime,CONVERT(varchar(10),statoric.OraDalle/100)+':'+CONVERT(varchar(10),statoric.OraDalle%100)),'00:00'
<div id="divCalendario" class="panel" runat="Server">

                                <div id="divCalendarNavigator" style="display: block;" runat="server">
                                    <div>
                                        <%--<asp:Calendar runat="server" ID="calendar" SelectionMode="DayWeek" TitleStyle-ForeColor="#1f7872" TitleStyle-Font-Bold="true" PrevMonthText="<i class=icon-foo>&#xf053;</i>" NextMonthText="<i class=icon-foo>&#xf054;</i>" NextPrevStyle-Font-Names="FontAwesome" SelectWeekText="<i class=icon-foo>&#xf0a6;</i>" SelectorStyle-Font-Names="FontAwesome" WeekendDayStyle-BackColor="LightGray" SelectedDayStyle-BackColor="#f3ef98" SelectedDayStyle-ForeColor="Black" SelectedDayStyle-Font-Bold="true" OnSelectionChanged="calendar_SelectionChanged"></asp:Calendar>--%>
                                        <asp:LinkButton runat="server" ID="lnkPrevWeek" OnClick="lnkPrevWeek_Click"><i class="fa fa-arrow-circle-o-left" aria-hidden="true"></i></asp:LinkButton>
                                        <asp:Literal ID="litData" runat="server"></asp:Literal>
                                        <asp:LinkButton runat="server" ID="lnkNextWeek" OnClick="lnkNextWeek_Click"><i class="fa fa-arrow-circle-o-right" aria-hidden="true"></i></asp:LinkButton>
                                        <asp:HiddenField runat="server" ID="hdnDa" /><asp:HiddenField runat="server" ID="hdnA" /><asp:HiddenField runat="server" ID="hdnSpostamento"/>
                                        <asp:DropDownList ID="ddlTecnicoCal" runat="server" AppendDataBoundItems="true" CssClass="tendina" placeholder="Tecnico" AutoPostBack="true">
                                            <%--<asp:ListItem Value="-1">Tutti</asp:ListItem>--%>
                                        </asp:DropDownList>
                                    </div>
                                </div>
                                <asp:Repeater ID="rptParent" runat="server">
                                    <ItemTemplate>
                                        <p style="margin-left: 10px"><b>
                                            <asp:Label ID="lblDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "data", "{0:dd/MM/yyyy}")%>'></asp:Label></b></p>
                                        <asp:Repeater ID="rptAppuntamenti" runat="server">
                                            <ItemTemplate>

                                                <%# Eval("id")%></td>

                                            </ItemTemplate>


                                        </asp:Repeater>
                                    </ItemTemplate>
                                </asp:Repeater>


                            </div>
Imports System.Data.SqlClient
Imports System.Globalization

Public Class Calendario
    Inherits System.Web.UI.Page
    Dim data1, data2 As DateTime
    Dim tecnico As Integer
    Dim utente As Utenti

    Public Function GetDayFromWeek(week As DateTime, day As DayOfWeek) As DateTime
        Dim startDay As DayOfWeek = System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek


        ' get the beginning of the week 
        Dim diff As Integer = CInt(week.DayOfWeek) - CInt(startDay)
        Dim beginingOfWeek As DateTime = week.AddDays(diff * -1)


        ' get the day we are looking for
        diff = CInt(day) - CInt(startDay)
        If diff < 0 Then
            diff = 7 - CInt(startDay)
        End If
        Return beginingOfWeek.AddDays(diff)
    End Function

    Public Function datasql(ByVal dataini As Date) As String

        Return dataini.Year & "-" & dataini.Month & "-" & dataini.Day

    End Function

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


        If Not IsPostBack Then
            caricaTecnici()
            Dim monday = GetDayFromWeek(Date.Today, DayOfWeek.Monday)
            Dim sunday = GetDayFromWeek(Date.Today, DayOfWeek.Sunday)

            hdnDa.Value = monday
            hdnA.Value = sunday

            litData.Text = monday & " " & sunday
            Dim dbVulcano As New dbVulcanoEntities
            data1 = Date.ParseExact(monday, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
            data2 = Date.ParseExact(sunday, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
            tecnico = Session("idUtente")
            utente = dbVulcano.Utenti.Where(Function(u) u.IDUtente = tecnico).Single


        End If

        BindRepeater()
    End Sub

    Private Sub BindRepeater()
        Dim constr As String = ConfigurationManager.ConnectionStrings("dbVulcanoConnectionString").ConnectionString
        Dim query As String = "Select distinct(statoRic.DataAss) as data
        From StatoRic 
        INNER Join 
        (Richieste INNER JOIN Clienti 
        On clienti.IDCliente=Richieste.RFCliente) 
        On StatoRic.RFRic=Richieste.IDRic
        join Utenti
        On utenti.IDUtente=StatoRic.RFTecnico
        WHERE(RFStato = 11 or RFStato = 12 Or rfstato = 13 Or rfstato = 41) And Attuale=1 and StatoRic.DataAss is not null and statoric.DataAss between @data1 and @data2 And RFTecnico=@tecnico 
        group by statoRic.DataAss order by statoRic.DataAss asc"

        Using con As New SqlConnection(constr)
            Using cmd As New SqlCommand(query, con)
                cmd.Parameters.AddWithValue("@data1", data1)
                cmd.Parameters.AddWithValue("@data2", data2)
                cmd.Parameters.AddWithValue("@tecnico", tecnico)
                Using sda As New SqlDataAdapter(cmd)
                    Dim dt As New DataTable()
                    sda.Fill(dt)
                    rptParent.DataSource = dt
                    rptParent.DataBind()
                End Using
            End Using
        End Using
    End Sub

    Private Sub rptParent_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles rptParent.ItemDataBound
        If (e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem) Then
            Dim childRepeater As Repeater = e.Item.FindControl("rptAppuntamenti")
            Dim lblDate As Label = e.Item.FindControl("lblDate")
            'Dim lblTecnico As Label = e.Item.FindControl("lblTecnico")
            Dim data As DateTime = Date.ParseExact(lblDate.Text, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
            'lblTecnico.Text = utente.NomeExt
            Dim constr As String = ConfigurationManager.ConnectionStrings("dbVulcanoConnectionString").ConnectionString
            Dim query As String = "Select statoric.id, (case when clienti.IDCliente = 796 then richieste.descr else clienti.RagSociale end) as RagSociale, CAST(statoRic.DataAss AS DATE) + ISNULL(CONVERT(datetime, CONVERT(varchar(10), statoRic.OraDalle / 100)+ ':' + CONVERT(varchar(10), statoRic.OraDalle % 100)),'00:00') as eventstart, CAST(statoRic.DataAss AS DATE) + ISNULL(CONVERT(datetime, CONVERT(varchar(10), statoRic.OraAlle / 100)+ ':' + CONVERT(varchar(10), statoRic.OraAlle % 100)),'00:30') as eventend, Utenti.Nome as tecnico, statoRic.DataAss as data
        From StatoRic 
        INNER Join 
        (Richieste INNER JOIN Clienti 
        On clienti.IDCliente=Richieste.RFCliente) 
        On StatoRic.RFRic=Richieste.IDRic
        join Utenti
        On utenti.IDUtente=StatoRic.RFTecnico
        WHERE(RFStato = 11 or RFStato = 12 Or rfstato = 13 Or rfstato = 41) And Attuale=1 and StatoRic.DataAss is not null And RFTecnico=@tecnico and statoric.DataAss = @data
        order by statoRic.DataAss asc"

            Using con As New SqlConnection(constr)
                Using cmd As New SqlCommand(query, con)
                    cmd.Parameters.AddWithValue("@data", data)
                    cmd.Parameters.AddWithValue("@tecnico", tecnico)
                    Using sda As New SqlDataAdapter(cmd)
                        Dim dt As New DataTable()
                        sda.Fill(dt)
                        childRepeater.DataSource = dt
                        childRepeater.DataBind()
                    End Using
                End Using
            End Using
        End If

    End Sub

    Sub caricaTecnici()

        Dim Query As String = "SELECT nome,idutente FROM Utenti WHERE attivo=1"
        Dim cmd As New SqlCommand(query)

        ddlTecnicoCal.DataSource = GetData(cmd)
        ddlTecnicoCal.DataTextField = "nome"
        ddlTecnicoCal.DataValueField = "idutente"
        ddlTecnicoCal.DataBind()
        ddlTecnicoCal.SelectedIndex = ddlTecnicoCal.Items.IndexOf(ddlTecnicoCal.Items.FindByValue(Session("idUtente")))
    End Sub

    Private Function GetData(cmd As SqlCommand) As DataTable
        Dim strConnString As String = ConfigurationManager.ConnectionStrings("dbVulcanoConnectionString").ConnectionString
        Using con As New SqlConnection(strConnString)
            Using sda As New SqlDataAdapter()
                cmd.Connection = con
                sda.SelectCommand = cmd
                Using dt As New DataTable()
                    sda.Fill(dt)
                    Return dt
                End Using
            End Using
        End Using
    End Function

    Protected Sub lnkPrevWeek_Click(sender As Object, e As EventArgs)
        data1 = Date.ParseExact(hdnDa.Value, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
        data2 = Date.ParseExact(hdnA.Value, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
        Dim monday = data1.AddDays(-7)
        Dim sunday = data2.AddDays(-7)
        hdnDa.Value = monday
        hdnA.Value = sunday

        litData.Text = monday & " " & sunday
        BindRepeater()
    End Sub

    Protected Sub lnkNextWeek_Click(sender As Object, e As EventArgs)
        data1 = Date.ParseExact(hdnDa.Value, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
        data2 = Date.ParseExact(hdnA.Value, "dd/MM/yyyy", CultureInfo.CreateSpecificCulture("en-US")).Date
        Dim monday = data1.AddDays(7)
        Dim sunday = data2.AddDays(7)
        hdnDa.Value = monday
        hdnA.Value = sunday
        litData.Text = monday & " " & sunday
        BindRepeater()
    End Sub


End Class
Dim data1, data2 As DateTime
Dim tecnico As Integer
Dim utente As Utenti
Session("tecnico") = x
ViewState("utente") = y