怎么嵌套,我的數據庫中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來顯示,另外添加一個銨鈕,用來處理存儲或是更新用戶選擇的信息:
看到否,用戶選擇的CheckBox存為1,非選擇的存為0 。還是演示一下吧:
現在需要做的事情是,把用戶選擇的,顯示於網頁上,也就是記住用戶選擇的選項。需要對程序改動兩個地方,第一個,就是變更獲取信息的方法,在這里,你也應該想上面寫好的存儲過程,它就是用在這個地方。
第二個地方,就是OnRowDataBound="GridView1_RowDataBound"事件:
Insus.NET分析與解決得不夠完細致與完美,只望共勉。
以下內容於2013-04-24 01:15更新補充:
如果你有時間,不防看看《在GridView列中動態創建幾個CheckBox(升級篇)》。



