浅谈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 ...
随机推荐
- Linux系统IP地址
1.IP地址概述 2.配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述,参考<计算机网络>课 ...
- hdoj 1150 Machine Schedule【匈牙利算法+最小顶点覆盖】
Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 加速 Gradle 构建大型 Android 项目的方法[转]
加速 Gradle 构建大型 Android 项目的方法 时间 2016-03-14 20:38:00 Mystra 原文 http://www.wangchenlong.org/2016/03/ ...
- linux-centos挂载新硬盘操作
类似的文章网上已经有很多,这里是记录重要操作的命令,精简流程 精简后的命令: fdisk -ldf -hfdisk /dev/vdbfdisk -l /dev/vdbmkfs -t ext4 /dev ...
- 用高德地图API 通过详细地址获得经纬度
http://cloud.sinyway.com/Service/amap.html http://restapi.amap.com/v3/geocode/geo?key=xxxxxxxxxxxxxx ...
- 2014年到期的myeclipse5.5.1注冊码
假设点击Myeclipse的载入项目到server的图标没有反应,这就是MyEclipse过期了,下面是还能用一年的注冊码: subscriber: axin Serial:nLR8ZC-85557 ...
- requireJS(二)
一.前言 requireJS(一) 本篇主要整理requirejs的一些用法,相对比较零散. 实例目录 二.优化 requirejs建议我们给每一个模块书写一个js文件.但是这样会增加网站的http请 ...
- 【HDU 2014 Multi-University Training Contest 1 1002】/【HDU 4862】Jump
多校训练就这么华丽丽的到了 ,于是乎各种华丽丽的被虐也開始了. 这是多校的1002; 最小费用最大流. 题目大意: 有n*m个方格,每一个方格都一个的十进制一位的数.你能够操作K次. 对于每一次操作, ...
- tcpreplay安装使用经验
tcpreplay安装使用经验 #Author: ypguo#Data: 2010.4.23#Version: 1.2 增加了修改VLAN tag内容. 1.1 ...
- 【转】Enable ARC in a Cocos2D Project: The Step-by-Step-How-To-Guide Woof-Woof!
On April 5, 2012, in idevblogaday, by Steffen Itterheim http://www.learn-cocos2d.com/2012/04/enablin ...