在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(升級篇)》。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM