大家好,俗称万事开头难,不经历风雨,怎能见彩虹。在此小编给大家带来一个自己练习的小实例,希望与大家一起分享与交流。下面进入应用场景,从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中移除和移动信息的更多相关文章

  1. 浅谈 WPF控件

    首先我们必须知道在WPF中,控件通常被描述为和用户交互的元素,也就是能够接收焦点并响应键盘.鼠标输入的元素.我们可以把控件想象成一个容器,容器里装的东西就是它的内容.控件的内容可以是数据,也可以是控件 ...

  2. 浅谈MapControl控件和PageLayoutControl控件

    1.MapControl控件是ArcObject(ArcEngine)中使用非常普遍的一个控件,它对应ArcMap中的DataView视图.MapControl控件实现的功能: 1)管理控件的外观.显 ...

  3. 浅谈XAML控件

    在win10系统内简单使用了XAML控件,由于本人英语水平有限,在自己的摸索使用.分析代码以及翻译软件.搜索引擎.室友情的帮助下了解了控件的相关功能,下面简要对XAML控件提出几点建议: 1.Cale ...

  4. 浅谈Winform控件开发(一):使用GDI+美化基础窗口

    写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...

  5. 浅谈EditText控件的inputType类型

    android:inputType="none"--默认 android:inputType="text"--输入文本字符 android:inputType= ...

  6. C# LIstbox 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”的问题 分类: winform2008-05-24 02:33 2592人阅读 评论(11) 收藏 举报 winf ...

  7. 解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合”

    解决WinForm下ListBox控件“设置DataSource属性后无法修改项集合” 最近更新: 2013-2-15    587   很少写WinForm程序第一次使用ListBox控件就遇到了比 ...

  8. WPF中ListBox控件在选择模式(SelectionMode)为Single时仍然出现多个Item被选中的问题

    最近在学习WPF过程中使用到了ListBox控件,在使用时遇到下面的奇怪问题: 代码如下: listBox.Items.Add("绘图"); listBox.Items.Add(& ...

  9. listbox控件使用

    1. 属性列表: SelectionMode    组件中条目的选择类型,即多选(Multiple).单选(Single)    Rows             列表框中显示总共多少行    Sel ...

  10. asp.net中的ListBox控件添加双击事件

    问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...

随机推荐

  1. What does the “__block” keyword mean?

    It tells the compiler that any variable marked by it must be treated in a special way when it is use ...

  2. 【转】谁说Vim不是IDE?(三)

    谁说Vim不是IDE?(三)   常用插件 之所以说Vim形成了自己的生态环境,就是因为Vim具备开放的插件体系,开发者为了提升开发效率,为Vim编写了数以万计的插件,我们可以根据需要任意选择,也可以 ...

  3. HDU4283:You Are the One(区间DP)

    Problem Description The TV shows such as You Are the One has been very popular. In order to meet the ...

  4. IOS开发之UINavigationBar

    简介 UINavigationBar是用于实现管理层级关系内容的组件,直接继承自UIView.通常用在UINavgationController类中,用于管理和显示UINavgationControl ...

  5. struts2 表单处理

    在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...

  6. Java多线程小结

    简述 Java是支持多线程编程的语言,线程相比于进程更加轻量级,线程共享相同的内存空间,但是拥有独立的栈.减少了进程建立.销毁的资源消耗.jdk1.5后对java的多线程编程提供了更完善的支持,使得j ...

  7. WDCP是什么 关于WDCP的详细介绍

    WDCP是WDlinux Control Panel的简称,是一套用PHP开发的Linux服务器管理系统以及虚拟主机管理系统,,旨在易于使用Linux系统做为我们的网站服务器,以及平时对Linux服务 ...

  8. 用nginx图片缓存服务器

    图片的存储硬件 把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很: 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能 ...

  9. Mysql参数详解

    1.配置参数 MySQL有两种途径途径了解其的配置参数,一个是MySQL交互模式下的命令SHOW  VARIABLES,一个使用mysqladmin variables 查询. MySQL的配置参数分 ...

  10. unix进程的环境--unix环境高级编程读书笔记

    http://blog.csdn.net/xiaocainiaoshangxiao/article/category/1800937