浅谈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 ...
随机推荐
- UIView frame, bounds and center
http://stackoverflow.com/questions/5361369/uiview-frame-bounds-and-center Since the question I asked ...
- Does anyone successfully use USB drive in Windows7 guest?
Hi, Does anyone successfully use USB drive in Windows7 guest? If I pass a USB drive to Windows7 gues ...
- 初级程序员应该了解的Linux命令
基于Linux的系统最美妙的一点,就是你可以在终端中使用命令行来管理整个系统.使用命令行的优势在于,你可以使用相同的知识和技能来管理随便哪个Linux发行版. 对于各个发行版以及桌面环境(DE)而言, ...
- Command-line interface
A command-line interface (CLI), also known as command-line user interface, console user interface, a ...
- 第十一章、认识与学习 BASH Bash Shell 的操作环境
bash中的变量动不动就说环境变量,真是奇怪,bash只是一个c语言编写的程序而已,跟环境变量有什么关系?如果知道dos的历史的话就知道有个时代是只有命令行界面而没有图形用户界面,这只小小的程序就包揽 ...
- 04、生成 HTMLTestRunner 测试报告
1.HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 1>下载HTMLTestRunner.py文件,地址为: h ...
- 【转】Android Studio 的小小配置
这篇博文的内容列表: 1.编辑器的字体设置 2.预览XML布局 3.导入项目 4.显示行号 5.新建Java类和Component的子类 额~~程序猿一般话都不多,嘿嘿,那咱就直接图文吧~ ^_^ ...
- iOS 开发中的争议(二)
这是该系列的第二篇.在本文中,我想讨论的是:对于 UI 界面的编写工作,到底应该用 xib/storyboard 完成,还是用手写代码来完成? 本着 “使用过才有发言权” 原则,我介绍一下我的经历: ...
- 对于Maven管理的项目制定虚拟目录
基于Maven管理的web项目结构: target目录是用来存放项目打包之后生成的文件的目录,此目录中的文件必须调用mvn clean package后才能生成, 如果把虚拟目录设置在此目录中,则每次 ...
- RedHat7搭建无人值守自动安装Linux操作系统(PXE+Kickstart)
Kickstart服务器 IP: 192.168.136.253 掩码:255.255.255.0 网关:192.168.136.2 DNS:192.168.136.2 安装部署HTTP服 ...