【问题标题】:Using Timer Control to call Images in Slideshows使用计时器控件调用幻灯片中的图像
【发布时间】:2015-02-13 12:19:58
【问题描述】:

我有两组图像,分别命名为 Div1 和 Div2,必须在幻灯片中调用。条件是这样的,

在前 7 天,我希望在幻灯片中显示第一组 Div 的图像,一旦 7 天结束,就应该显示下一组 Div 的图像。我知道可以通过定时器控制。但是我到现在都没用过。

到目前为止没有代码可以分享,因为我已经从表格中调用了幻灯片中的图像。如果您还有其他需要,请告诉我。

请帮忙。这样我就可以使用它了

任何帮助都将是可观的

我的幻灯片代码在这里:-

 protected void Page_Load(object sender, EventArgs e) 
    { 
            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultSQLConnectionString"].ConnectionString); 
            SqlDataAdapter da = new SqlDataAdapter("SELECT Name FROM tblImages", conn); 
            DataTable dt = new DataTable(); 
            da.Fill(dt); 
            rptImages.DataSource = dt; 
            rptImages.DataBind(); 
            Page.Header.DataBind(); 
    }

aspx代码:-

 <div class="imgbanner-login" style="margin-bottom: 10px;">
        <div class="img-login-ca">

            <div class="index-img-banner">
                <div id="slider" class="nivoSlider">
                    <asp:Repeater ID="rptImages" runat="server">
                        <ItemTemplate>
                            <li style="list-style: none;">
                                <img alt="" src='<%# Eval("Name") %>' />
                            </li>
                        </ItemTemplate>
                    </asp:Repeater>
                </div>
            </div>

            <div class="login">
                <uc1:indexrightpanel runat="server" id="indexRightPanel" />
            </div>
        </div>

    </div>

另见分贝结构:-

ID int 未选中

名称 nvarchar(MAX) 已检查

[订单] int 检查

名称列包含图像路径

【问题讨论】:

  • 这里是文档:msdn.microsoft.com/en-us/library/bb398865(v=vs.100).aspx。阅读它尝试为您的情况做点什么,然后回来。
  • @mybirthname:感谢您的参考,我一定会尝试的 :)
  • 7 天!!!因为在浏览器中预计会保持打开那么长时间?!
  • @deostroll: 客户要求 7 天,然后下一组图像。有没有可能,请帮忙。浏览器部分不是他们的问题。我们只需让它运行 7 天并在下一组图像之后运行
  • 是否要求浏览器程序必须7天24小时开放?

标签: c# html sql asp.net timer


【解决方案1】:

这是我设置的一个小型数据库,用于演示如何处理此要求的想法:

CREATE TABLE [dbo].[SetTable] (
    [SetId]   INT          IDENTITY (1, 1) NOT NULL,
    [SetName] VARCHAR (10) NOT NULL,
    PRIMARY KEY CLUSTERED ([SetId] ASC)
);

Go

INSERT INTO SetTable values ('A'), ('B');

GO

CREATE TABLE [dbo].[SetShowLog] (
    [Id]        INT      IDENTITY (1, 1) NOT NULL,
    [SetId]     INT      NOT NULL,
    [LastShown] DATETIME DEFAULT (getdate()) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_SetShowLog_SetTable] FOREIGN KEY ([SetId]) REFERENCES [dbo].[SetTable] ([SetId])
);

Go

CREATE TABLE [dbo].[ImageTable] (
    [Id]    INT          IDENTITY (1, 1) NOT NULL,
    [Name]  VARCHAR (25) NULL,
    [SetId] INT          NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_ImageTable_SetTable] FOREIGN KEY ([SetId]) REFERENCES [dbo].[SetTable] ([SetId])
);

Go

Insert into ImageTable ([Name], [SetId]) values
    ('image1.jpg', 1),
    ('image2.jpg', 1),
    ('image3.jpg', 2),
    ('image4.jpg', 2);

go

CREATE PROCEDURE [dbo].[GetImages]  
AS
    declare @logId int;

    --get the last shown set
    select @logid = IDENT_CURRENT('SetShowLog');

    declare @setid int;
    declare @lastShowDate datetime;
    declare @now datetime;

    set @now = GETDATE();

    select 
        @setid = setid, 
        @lastShowDate = LastShown 
    from SetShowLog 
    where Id = @logId;

    if @@ROWCOUNT = 0 
        begin
            --this is first insert into the log table
            insert into SetShowLog(SetId) values (1);
            set @setid = 1; --we show set A as default
        end
    else
        begin
            if( DATEDIFF(dd, @lastShowDate, @now) > 7 ) --seven day check
            begin
                --change the set
                select @setid = case @setid when 1 then 2 
                    when 2 then 1 end;
                --update log
                insert into SetShowLog(SetId) values (@setid);
            end
        end --//end of @@rowcount check
    select * from ImageTable where SetId = @setid;
RETURN 0

您可以在 Visual Studio 中启动一个新的数据库文件并运行脚本来初始化数据库...检查存储的 proc GetImages 实现。

这只是让您可以根据自己的要求查询图像。您可以在 Timer 回发中重用您的代码本身,只需调用存储的 proc。

【讨论】:

  • 是的。在计时器触发事件​​上,您需要编写您在页面加载中编写的代码......只有绑定中继器的部分。而且我想你也可以为它设置一个非常高的间隔......
  • 您的 SelectCommand 应该用于查询存储过程中的结果,而不是普通的 sql 查询...
  • 你的意思是说我剩下的代码没问题,只需要添加如下过程:-SqlDataAdapter da = new SqlDataAdapter("GetImages", conn);
  • 如果您不确定如何将 SelectCommand 与存储过程一起使用,请查看 this
  • 您尝试这样做时遇到了什么问题...?
【解决方案2】:

我不会编写任何代码,但一个简单的解决方案是在某个地方设置开始日期。你做一个 datediff 几天,然后一个 mod 14,任何低于 7 的都是第一周,任何高于 7 的都是第二周,根据该条件进行选择

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多