浅谈ListBox控件,将对象封装在listBox中,在ListBox中显示对象中某个属性,在ListBox中移除和移动信息
大家好,俗称万事开头难,不经历风雨,怎能见彩虹。在此小编给大家带来一个自己练习的小实例,希望与大家一起分享与交流。下面进入应用场景,从SQL2008数据库取出数据,给ListBox赋值在界面并显示出来,通过窗体应用程序上Button控件,执行移动、移除等功能。
开发环境
开发工具:Microsoft Visual Studio 旗舰版、SQL Server 2008.
开发环境:.NET Framework 4 Client Profile.
实现步骤
1、搭建MVC框架、建立PERSON_T表格;
首先,了解什么是MVC框架,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不需要重新编写业务逻辑MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
我在VS项目中建立一个目录如下图:

然后,在SQL2008中FMSDB数据库中建立PERSON_T表;具体代码见下方:
USE [FMSDB]
GO /****** Object: Table [dbo].[PERSON_T] Script Date: 07/30/2013 15:47:33 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[PERSON_T](
[NAME] [nvarchar](50) NULL,
[AGE] [int] NULL
) ON [PRIMARY] GO
2、与SQL 2008建立连接、查询和删除信息;
首先,给数据库创建一个实例FMSDB,再给FMSDB资料库创建一个PERSON_T表,新添用户“root”,密码“12345”;能成功连接上数据库服务器,
数据库连接具体见下图:

App.config 与数据库连接具体代码见下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="myDatabase.Conn" value="Data Source=localhost,1433;Network Library=DBMSSOCN;Initial Catalog=FMSDB;User ID=root;Password=12345;" />
</appSettings>
</configuration>
SelectGW.cs中具体代码见下:其中需要添加引用System.Configuration、System.Data.SqlClient.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration; namespace ListBoxUnit1.DataGateway
{
public class SelectGW
{
private string connectString = ""; public SelectGW()
{
connectString = ConfigurationManager.AppSettings["myDatabase.Conn"];
} public SqlConnection GetSqlConnection()
{
SqlConnection conn = new SqlConnection(connectString);
conn.Open();
return conn;
} public DataSet GetPersonData()
{
DataSet ds = new DataSet();
string sqlText = @"SELECT * FROM PERSON_T;";
try
{
SqlConnection conn = GetSqlConnection();
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandText = sqlText;
sqlCommand.CommandType = CommandType.Text;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand); sqlDataAdapter.Fill(ds);
}
catch (Exception ex)
{ }
return ds;
} public int DeleteUserInfoData(string NAME)
{
string sqlText = @"delete FROM PERSON_T where NAME='{0}';";
sqlText = string.Format(sqlText, NAME);
try
{
SqlConnection conn = GetSqlConnection();
SqlCommand sqlCommand = conn.CreateCommand();
sqlCommand.CommandText = sqlText;
sqlCommand.CommandType = CommandType.Text;
int i=sqlCommand.ExecuteNonQuery();
return i;
}
catch (Exception ex)
{
return 0;
}
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
3、建立一个Person对象,重载用户姓名;
Person.cs中具体代码见下:
namespace ListBoxUnit1
{
public class Person
{
private int _age; public int Age
{
get { return _age; }
set { _age = value;}
}
private string _name; public string Name
{
get { return _name; }
set { _name = value;}
}
public override string ToString()
{
return this._name;
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
4、在控制层中主要代码如下Controller.cs:
using System.Collections.Generic;
using System.Data;
using ListBoxUnit1.DataGateway; namespace ListBoxUnit1.Core
{
public class Controller
{
public SelectGW GW;
public Controller()
{
GW =new SelectGW();
} public List<Person> GetUserInfo()
{
List<Person> persons = new List<Person>();
DataSet ds = GW.GetPersonData();
if (ds.Tables[0].Rows.Count > 0)
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
Person p = new Person();
p.Name = ds.Tables[0].Rows[i][0].ToString();
p.Age = int.Parse(ds.Tables[0].Rows[i][1].ToString());
persons.Add(p);
}
return persons;
} public bool DeleteUser(string name)
{
bool result=false;
int i= GW.DeleteUserInfoData(name);
if (i > 0)
{
result = true;
}
return result;
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
5、在视图层主要代码MainFrom.cs具体如下:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ListBoxUnit1.Core; namespace ListBoxUnit1
{
public partial class MainForm : Form
{
private Controller Control; public MainForm()
{
InitializeComponent();
Control = new Controller();
} private void MainForm_Load(object sender, EventArgs e)
{ List<Person> persons = new List<Person>(); persons = Control.GetUserInfo();
for (int i = 0; i < persons.Count; i++)
{
listBoxFor.Items.Add(persons[i]);
listBoxFor.SelectedIndex = 0;
}
} private void btnAdd_Click(object sender, EventArgs e)
{
if (listBoxFor.SelectedItems.Count == 0)
{
MessageBox.Show("没选中添加用户信息");
}
else
{
listBoxForeach.Items.Add(listBoxFor.SelectedItem);
listBoxFor.Items.Remove(listBoxFor.SelectedItem);
} } private void btnRemove_Click(object sender, EventArgs e)
{ if (listBoxFor.SelectedItem != null)
{ DialogResult comfirm = MessageBox.Show("确定删除选中信息...", "确定删除", MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation);
if (comfirm == DialogResult.Yes)
{
string Name = listBoxFor.SelectedItem.ToString();
bool result = Control.DeleteUser(Name);
if (result)
{
listBoxFor.Items.Remove(listBoxFor.SelectedItem);
}
}
} } private void btnLeft_Click(object sender, EventArgs e)
{
if (listBoxForeach.SelectedItems.Count == 0)
{
MessageBox.Show("没选中添加用户信息");
}
else
{
listBoxFor.Items.Add(listBoxForeach.SelectedItem);
listBoxForeach.Items.Remove(listBoxForeach.SelectedItem);
}
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
效果图
窗体载入画面

可以删除左边选中一栏一个信息,单击移除

删除成功后界面图

技术点
熟悉ListBox的一些基本用法,实现数据移除和移动的功能;
了解MVC框架后,将MVC框架思想应用到实际例子中;
建立Person对象,通过重载用户名后,显示在界面的只是Person对象上的一个属性;
利用SQL进行数据的查询与删除,同时更新视图层的信息;
熟练运用If…else语句,才能将控制能做好。
问题疑惑
怎样能将控制做完善,才能让系统经得起考验,不会出现奔溃或bug。
怎么让面向对象的编程能够灵活运用起来。
感想
通过几天的劳作,将代码分享一下,中间肯定存在不足,希望大家提供好的建议,通过这次锻炼,熟悉了面向对象编程、以及MVC系统框架的搭建有了一些了解、掌握建立于SQL数据库的链接的方法等。
浅谈ListBox控件,将对象封装在listBox中,在ListBox中显示对象中某个属性,在ListBox中移除和移动信息的更多相关文章
- 浅谈 WPF控件
首先我们必须知道在WPF中,控件通常被描述为和用户交互的元素,也就是能够接收焦点并响应键盘.鼠标输入的元素.我们可以把控件想象成一个容器,容器里装的东西就是它的内容.控件的内容可以是数据,也可以是控件 ...
- 浅谈MapControl控件和PageLayoutControl控件
1.MapControl控件是ArcObject(ArcEngine)中使用非常普遍的一个控件,它对应ArcMap中的DataView视图.MapControl控件实现的功能: 1)管理控件的外观.显 ...
- 浅谈XAML控件
在win10系统内简单使用了XAML控件,由于本人英语水平有限,在自己的摸索使用.分析代码以及翻译软件.搜索引擎.室友情的帮助下了解了控件的相关功能,下面简要对XAML控件提出几点建议: 1.Cale ...
- 浅谈Winform控件开发(一):使用GDI+美化基础窗口
写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...
- 浅谈EditText控件的inputType类型
android:inputType="none"--默认 android:inputType="text"--输入文本字符 android:inputType= ...
- C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...
- 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”
解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合” 最近更新: 2013-2-15 587 很少写WinForm程序第一次使用ListBox控件就遇到了比 ...
- WPF中ListBox控件在选择模式(SelectionMode)为Single时仍然出现多个Item被选中的问题
最近在学习WPF过程中使用到了ListBox控件,在使用时遇到下面的奇怪问题: 代码如下: listBox.Items.Add("绘图"); listBox.Items.Add(& ...
- listbox控件使用
1. 属性列表: SelectionMode 组件中条目的选择类型,即多选(Multiple).单选(Single) Rows 列表框中显示总共多少行 Sel ...
- asp.net中的ListBox控件添加双击事件
问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...
随机推荐
- 文件上传工具swfupload[转]
转至:http://zhangqgc.iteye.com/blog/906419 文件上传工具swfupload 示例: 1.JavaScript设置SWFUpload部分(与官方例子类似): var ...
- oc学习之路----多级指针的使用和内存分析
---恢复内容开始--- 精髓:要熟悉指针的使用,首先要熟悉指针的各种状态存得是什么数据.(以一级指针 int *p1 二级指针:int **p2 三级指针:int ***p3为例) 一级指针:*p1 ...
- Log接口的重新封装
闲来没事,看见当前的项目的日志形式有点冗余,每个类都需要声明确实有点繁琐, 因此重新将logback重新封装一下,供整个工程共享使用,版本是1.0.9. 代码如下: import java.lang. ...
- iOS中二维码的生成与使用(入门篇)
这里简单总结一下关于二维码的扫描与生成,用的是原生的AVFoundation框架,其实这个框架目前功能还是够用的,不过这里推荐一个二维码扫描的第三方(face++),网址就不贴了,直接度娘就OK,里面 ...
- 会话数据的管理——Session
cookie的局限性: cookie只能存字符串类型.不能保存对象 只能存非中文 1个cookie的容量不超过4KB(如果要保存非字符串,超过4kb内容,只能使用session技术!!!) Sessi ...
- jquerymobile知识点:button与a
首先先上一段代码: <a href="#" data-role="button" onclick="change();" id=&qu ...
- spring core源码解读之ASM4用户手册翻译之一asm简介
第一章:ASM介绍 1.1 ASM动机: 程序的分析,生成,转换技术可以应用到许多场景: 1.程序分析,从简单的语法解析到完整的语义分析,可以应用在程序中找到潜在的bug,发现无用的代码,工程代码的逆 ...
- java Reference(摘录)
Java中的Reference对象和GC是紧密联系在一起的,Reference的实现也是和GC相关的. 强引用 强引用是Java中使用最普遍的引用,我们经常使用的Object o = new Obje ...
- 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试
import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...
- Jquery调用从ashx文件返回的jsonp格式的数据处理实例
开发环境:vs2010+jquery-1.4.min.js 解决问题:网上代码比较少,好多调试不通,返回数据不用json而用jsonp主要考虑解决跨域问题 开发步骤:打开VS2010,新建一web站点 ...