zoukankan      html  css  js  c++  java
  • 在GridView列中动态创建几个CheckBox

    怎么嵌套,我的数据库中inputs字段是一个带空格的字符串

    我想用gridview读出来,把info字符串变成可选的几个复选框,因为我还想选择这些复选框

    --------------------------------------------------------------------------------------------------------------

    分隔线上是某论坛一网友问及的问题。
    要求也许是后期出现,刚开始时,只是让用户在文本框输入Info字段信息,后期才需要显示为CheckBox。因此最初设计是很重要,一稍没有想好,后面的开发,就是遇上很多问题。现在Insus.NET实现网友最初要求,把字符串改为CheckBox显示。既然改为CheckBox了,那肯定会有让用户选择,有先选择的功能,那也肯定需要存储选择的结果。因此Insus.NET分两步来做,首先是把字符串显示为CheckBox,第二步是保存选择结果。做好这个,得先准备好数据才行。


    数据库层:

    View Code
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-04-22
    -- Description:    About save some information
    -- =============================================
    CREATE TABLE [dbo].[Information]
    (
        [Name] NVARCHAR(15) NOT NULL PRIMARY KEY,
        [Info] NVARCHAR(100) NULl
    )
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-04-22
    -- Description:     Insert some information
    -- =============================================
    INSERT INTO [dbo].[Information] ([Name],[Info]) VALUES
    ('Name1','School city sex'),
    ('Name2','Age city addr'),
    ('Name3','City hobby'),
    ('Name4','')
    
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-04-22
    -- Description:    Get all information
    -- =============================================
    CREATE PROCEDURE [dbo].[usp_Information_GetAll]
    AS
    SELECT [Name],[Info] FROM [dbo].[Information]
    
    GO


    在ASP.NET层:
    创建一个类别,Insus.NET.Information:

    Information
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    /// Summary description for Information
    /// </summary>
    namespace Insus.NET
    {
        public class Information
        {
            private string _Name;
            private string _Infor;
    
            public string Name
            {
                get { return _Name; }
                set { _Name = value; }
            }
            public string Infor
            {
                get { return _Infor; }
                set { _Infor = value; }
            }
    
            BusinessBase objBusinessBase = new BusinessBase();
    
            public Information()
            {
                //
                // TODO: Add constructor logic here
                //
            }
    
            public DataTable GetAll()
            {
                return objBusinessBase.GetDataToDataSet("usp_Information_GetAll").Tables[0];
            }
        }
    }


    创建一个网页CheckBoxListGridViewDemo.aspx:


    GridView控件,应该写上AutoGenerateColumns="false" ,因为应用了自定义列。另外使用 OnRowDataBound="GridView1_RowDataBound"事件,将用来动态为CheckBox绑定数据。

    看看CheckBoxListGridViewDemo.aspx.cs:


    看看效果:


    第四行有问题,就是Info值为空时,它也有一个CheckBox,解决它,加个判断是否可行?


    Ok,第一步完成,接下来是完成第二步,把用户选择的CheckBox存起来,还要重新显示于GridView上。
    首先在数据库创建一个表,用于存储。还有两个存储过程:

    View Code
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-04-22
    -- Description:    Create table save information
    -- =============================================
    CREATE TABLE [dbo].[MyInformation]
    (
        [Name] NVARCHAR(15) NOT NULL REFERENCES [dbo].[Information] ([Name]),
        [MyInfo] NVARCHAR(100) NULl
    )
    
    GO
    
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-04-22
    -- Description:     Save selected data
    -- =============================================
    CREATE PROCEDURE [dbo].[usp_MyInformation_IntUp]
    (
        @Name NVARCHAR(15),
        @MyInfo NVARCHAR(100)
    )
    AS
    IF EXISTS(SELECT TOP 1 1 FROM [dbo].[MyInformation] WHERE [Name] =  @Name)
        UPDATE [dbo].[MyInformation] SET [MyInfo] = @MyInfo  WHERE [Name] =  @Name
    ELSE
        INSERT INTO [dbo].[MyInformation] ([Name],[MyInfo]) VALUES (@Name,@MyInfo)
    GO
    
    
    -- =============================================
    -- Author:        Insus.NET
    -- Create date: 2013-04-22
    -- Description:     show selected data
    -- =============================================
    CREATE PROCEDURE [dbo].[usp_Information_Selected]
    AS
    SELECT i.[Name],[Info],[MyInfo] FROM [dbo].[Information] AS i
    LEFT JOIN [dbo].[MyInformation] AS mi ON (i.[Name] = mi.[Name])
    
    GO

     
    回到asp.net程序,打开Insus.NET.Information类别,添加一个方法:

    在App_Code目录,创建另外一个类别:Insus.NET.MyInformation:


    数据层与逻辑完成,接下来,我们去.aspx页面,第一字段用Label来显示,另外添加一个铵钮,用来处理存储或是更新用户选择的信息:

    在.aspx.cs的OnCliek事件:


    看到否,用户选择的CheckBox存为1,非选择的存为0 。还是演示一下吧:

     现在需要做的事情是,把用户选择的,显示于网页上,也就是记住用户选择的选项。需要对程序改动两个地方,第一个,就是变更获取信息的方法,在这里,你也应该想上面写好的存储过程,它就是用在这个地方。

     第二个地方,就是OnRowDataBound="GridView1_RowDataBound"事件:

     
    最终的效果:

     
    Insus.NET分析与解决得不够完细致与完美,只望共勉。

    以下内容于2013-04-24 01:15更新补充

    如果你有时间,不防看看《在GridView列中动态创建几个CheckBox(升级篇)》。

  • 相关阅读:
    LeetCode100——same tree
    Stl——Vector.erase()用法
    xor异或逻辑运算
    爬楼梯问题——迭代or递归
    简单博弈论取石子
    纪念我的leetcode开门之旅
    JiuDuOj——1049
    [Codeforces 872]比赛记录
    [BZOJ 4563]放棋子
    10.14
  • 原文地址:https://www.cnblogs.com/insus/p/3035447.html
Copyright © 2011-2022 走看看