- 浏览: 86412 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
flex_莫冲:
你试过没阿。这么转的。都没用。
JS复制文件和如何利用js遍历文件夹 -
fzfx88:
jboss-5.1.0.GA 可以用 jdk1.5 吗?
jboss-5.1.0.GA配置 -
20055294:
正在 学习这些东西啊
Struts,Hibernate,Spring经典面试题收藏 -
xiaoqing20:
...
eclipse插件安装方法 -
geweixin:
说实话,我现在痛恨面试了~~~呵呵,我找工作的话,去面试,直接 ...
Struts,Hibernate,Spring经典面试题收藏
WPF 一个简单的示例
最近公司让学WPF,在网上找了个例子,调了一下,在这儿跟大家分享,还存在许多问题,大家共同研究:
参考:http://www.zhiweinet.com/jiaocheng/2008-06/855.htm
首先是数据库连接上的一些问题:
一:装上SQLSERVER 2005,以前登录直接选择'Windows身份验证',并没有什么问题出现!可前段时间采用'SQLSERVER身份验证'去登录,随之的问题就来了.无论用什么方法就是一个结果出错! 出错的原因是:'用户 'sa' 登录失败。该用户与可信 SQL Server 连接无关联'
/// 具体的方法是: 1:打开SQL Server Manager管理器!在左面找到 ‘安全性’ 单击右键 选择‘新建”,“登录” 弹出一个对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验证',并输入密码,可以把‘用户下次登录时必须修改密码’取消掉。 点击‘用户映射’,在右面选择要映射的数据库,并在前面打勾!在下面一栏中‘db-owner’和‘public’前面打勾。然后点击'状态'在右面栏中选中"授予"、“启用”,这两项一般是默认的,但如果默认的不是此两项必须改过来,不然是连不上的!点击‘确定’。
2:找到SQL服务器,在左栏中上面,单击右键,在弹出的菜单中选择“属性”命令。弹出一个对话框,单击“安全性”,在“服务器身份验证”下面选择“SQL SERVER和WINDOWS身份验证模式”,在前面打勾!记得这一步很重要,如果没有这一步你就别想登录成功!然后单击“确定”就可以了! 3:重新启动服务就可以选择SQL SERVER 身份验证模式登录了!输入刚才的用户名和密码就可以登录成功了!
二:
C#中的字符串,如正则表达式中,有可能出现一些与C#语言相同的字符,比如"\",会让编译器作为C#语言来识别,截断该字符串,并可能产生编译器错误.
为了防止这种情况的发生,在该字符串前加一个"@"就是告诉编译器,这些特殊字符是作为字符串中的一部分存在的,编译器就不会去编译它了.
比如路径"c:\abc\d.txt"将产生编译器错误,之前可以写为"@c:\abc\d.txt"便得到其真实路径了.
下面是关于WPF的例子:
数据库:Test表:t_admin,person
t_admin(pId,pPwd)字段都是字符型的
person(ContactId,FirstName,LastName,EmailAddress)字段都是字符型的
登陆窗口Window2.xaml:
<Window x:Class="WPFTest.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="登陆界面" Height="300" Width="300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="27*" /> <RowDefinition Height="175*" /> <RowDefinition Height="60*" /> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Background="BlueViolet"> <TextBlock Grid.Row="0" HorizontalAlignment="Center" Height="25" Name="title" Width="auto" Text="登陆界面" FontSize="16" /> </StackPanel> <WrapPanel Grid.Row="1" Orientation="Horizontal" Margin="0,10,0,0"> <StackPanel Height="37" Margin="0,13,0,0" Name="stackPanel1" VerticalAlignment="Top" Orientation="Horizontal"> <TextBlock Height="25" Name="textBlock1" Width="75" Text=" 用户ID:"/> <TextBox Name="userID" Width="182" Height="26" /> </StackPanel> <StackPanel Margin="0,13,0,10" Name="stackPanel2" Orientation="Horizontal"> <TextBlock Height="25" Name="textBlock2" Width="75" Text=" 密码:"/> <PasswordBox Height="26" Name="userPwd" Width="182" /> </StackPanel> <Label Height="26" Name="errMess" Width="268" Visibility="Hidden"></Label> </WrapPanel> <Button Grid.Row="2" Margin="84,13,111,10" Name="btnLogin" Click="btnLogin_Click" >登陆</Button> <Button Grid.Row="2" HorizontalAlignment="Right" Margin="0,13,10,12" Name="button1" Width="81" Click="button1_Click">关闭</Button> </Grid> </Window>
对应的Window2.xaml.cs代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Data.SqlClient; namespace WPFTest { /// <summary> /// Window2.xaml 的交互逻辑 /// </summary> public partial class Window2 : Window { public Window2() { InitializeComponent(); this.errMess.Visibility = Visibility.Hidden; } private void btnLogin_Click(object sender, RoutedEventArgs e) { SqlConnection myConn = null; try { myConn = this.createConn(); myConn.Open(); string uid = this.userID.Text.Trim(); string upwd = this.userPwd.Password; string mySql = "select count(*) from dbo.T_admin where pID = '" + uid+"' and pPwd = '"+upwd+"'"; SqlCommand cmd = new SqlCommand(mySql, myConn); int count = Convert.ToInt32(cmd.ExecuteScalar()); if (count > 0) { //隐藏登陆界面,显示查询界面 this.Hide(); Window win1 = new Window1(); win1.Show(); } else { this.errMess.Visibility = Visibility.Visible; this.errMess.Content = "登陆失败!"; } } finally { myConn.Close(); } } private SqlConnection createConn() { SqlConnection conn = new SqlConnection(@"server=.\SQLEXPRESS;database=Test;uid=login;password=login"); //SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test.MDF;Integrated Security=True;User Instance=True"); return conn; } private void button1_Click(object sender, RoutedEventArgs e) { this.Close(); } } }
数据的增删改查界面Window1.xaml:
<Window x:Class="WPFTest.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="查询界面" Height="300" Width="300" IsEnabled="True"> <Grid Background="Aquamarine" Opacity="1"> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="auto" MinHeight="100" /> <RowDefinition Height="22" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions > </Grid.ColumnDefinitions> <ListView Height="280" Name="listView1" VerticalAlignment="Top" MinWidth="280" SelectionChanged="listView1_SelectionChanged"> <ListView.View > <GridView x:Name="gridView1"> <GridViewColumn Header="ContactID" DisplayMemberBinding="{Binding Path=ContactID}" ></GridViewColumn > <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding Path=FirstName}"></GridViewColumn> <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding Path=LastName}"></GridViewColumn> <GridViewColumn Header="EmailAddress" DisplayMemberBinding="{Binding Path=EmailAddress}"></GridViewColumn> </GridView> </ListView.View> </ListView> <WrapPanel Grid.Row="1" Height="100" Orientation="Horizontal" DataContext="{Binding ElementName=listView1,Path=SelectedItem}"> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_ContactID" Text="ContactID:" /> <TextBox Name="textBox_ContactID" MinWidth="100" Text="{Binding ContactID}" IsEnabled="True" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_FirstName" Text="FirstName:" /> <TextBox Name="textBox_FirstName" MinWidth="100" Text="{Binding FirstName}"/> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_LastName" Text="LastName:" /> <TextBox Name="textBox_LastName" MinWidth="100" Text="{Binding LastName}"/> </StackPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2"> <TextBlock Name="textBlock_EmailAddress" Text="EmailAddress:" /> <TextBox Name="textBox_EmailAddress" MinWidth="100" Text="{Binding EmailAddress}"/> </StackPanel> </WrapPanel> <StackPanel Orientation="Horizontal" Margin="5,2,5,2" Grid.Row="2" > <Button HorizontalAlignment="Right" Name="btnUpdata" Click="btnUpdata_Click" >数据更新</Button> <Button HorizontalAlignment="Center" Name="btnAdd" Click="btnAdd_Click">添加</Button> <Button HorizontalAlignment="Left" Name="btnDell" Click="btnDell_Click">删除</Button> <Button HorizontalAlignment="Left" Name="button2" Width="57" Click="button2_Click">调用</Button> </StackPanel> </Grid> </Window>
对应的Window1.xaml.cs代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Data.SqlClient; using System.Data; namespace WPFTest { /// <summary> /// Window1.xaml 的交互逻辑 /// </summary> public partial class Window1 : Window { public Window1() { InitializeComponent(); getData(); } private void button1_Click(object sender, RoutedEventArgs e) { getData(); } private void listView1_SelectionChanged(object sender, SelectionChangedEventArgs e) { // this.textBox_ContactID.IsEnabled = false; textBox_ContactID.SetValue( TextBox.IsEnabledProperty, Convert.ToBoolean(false)); } void getData() { //初始化数据连接. SqlConnection Myconn = this.createConn(); //建立连接 SqlDataAdapter sda = new SqlDataAdapter("select ContactID,FirstName,LastName,EmailAddress from dbo.person where ContactID<=100;", Myconn); //SqlCommandBuilder commBuilder = new SqlCommandBuilder(sda); //sda.UpdateCommand = commBuilder.GetUpdateCommand(); DataTable dt = new DataTable(); //sda.AcceptChangesDuringUpdate = true; sda.Fill(dt); //与界面绑定 this.listView1.ItemsSource = dt.DefaultView; Myconn.Close(); } private void button2_Click(object sender, RoutedEventArgs e) { Window win = new Window2(); win.Show(); } private SqlConnection createConn() { SqlConnection conn = new SqlConnection(@"server=.\SQLEXPRESS;database=Test;uid=login;password=login"); //SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test.MDF;Integrated Security=True;User Instance=True"); return conn; } /* * 数据的更新 * * */ private void btnUpdata_Click(object sender, RoutedEventArgs e) { string id = this.textBox_ContactID.Text.ToString(); string firstName = this.textBox_FirstName.Text.ToString(); string lastName = this.textBox_LastName.Text.ToString(); string eMail = this.textBox_EmailAddress.Text.ToString(); SqlConnection Myconn = this.createConn(); Myconn.Open(); try { SqlCommand cmd = new SqlCommand("update dbo.person set FirstName = '" + firstName + "',LastName='" + lastName + "',EmailAddress='" + eMail + "' where ContactID = '" + id + "'",Myconn); //SqlDataAdapter sda = new SqlDataAdapter("updata dbo.person set FirstName = '" + firstName + "',LastName='" + lastName + "',EmailAddress='" + eMail + "' where ContactID = '" +id+"'"); cmd.ExecuteNonQuery(); MessageBox.Show("更新成功!"); }catch(Exception ex) { ex.ToString(); MessageBox.Show("更新失败!"); } finally { Myconn.Close(); } } /* * 数据的添加 * * */ private void btnAdd_Click(object sender, RoutedEventArgs e) { string id = this.textBox_ContactID.Text.ToString(); string firstName = this.textBox_FirstName.Text.ToString(); string lastName = this.textBox_LastName.Text.ToString(); string eMail = this.textBox_EmailAddress.Text.ToString(); if (!this.IsHasData(id)) { //不存在,进行数据添加 SqlConnection Myconn = this.createConn(); Myconn.Open(); try { string sql = "insert into dbo.person(ContactID,FirstName,LastName,EmailAddress) values('"+id+"','"+firstName+"','"+lastName+"','"+@eMail+"')"; SqlCommand cmd = new SqlCommand(sql,Myconn); cmd.ExecuteNonQuery(); MessageBox.Show("数据添加成功!"); //不通过后台查询,直接反映到前台 //this.gridView1.Columns.Add(gvc); } catch (SqlException ex) { ex.ToString(); MessageBox.Show("数据添加失败!"); } finally { Myconn.Close(); } // 通过后台查询反映到前台 getData(); } else { //存在 MessageBox.Show("数据ID已经存在!"); } } /* * 判断是否存在数据 * * */ private bool IsHasData(string id) { SqlConnection Myconn = this.createConn(); Myconn.Open(); try { SqlCommand cmd = new SqlCommand("select count(*) from dbo.person where ContactID='" + id +"'",Myconn); int count = Convert.ToInt32(cmd.ExecuteScalar()); if (count > 0) { return true; } else { return false; } } catch(Exception ex) { ex.ToString(); return false; } finally { Myconn.Close(); } } /* * 数据的删除 * * */ private void btnDell_Click(object sender, RoutedEventArgs e) { string id = this.textBox_ContactID.Text.ToString(); if(this.IsHasData(id)) { //数据存在进行删除 SqlConnection Myconn = this.createConn(); Myconn.Open(); try { string sql = "delete from dbo.person where ContactID ='"+ id+"'"; SqlCommand cmd = new SqlCommand(sql,Myconn); cmd.ExecuteNonQuery(); MessageBox.Show("删除成功!"); //不通过后台查询,直接反映到前台 //this.gridView1.Columns.Add(gvc); } catch(SqlException ex) { ex.ToString(); } finally { Myconn.Close(); } // 通过后台查询反映到前台 getData(); } } } }
注意:启动窗口设置为Window2
修改:App.xaml
<Application x:Class="WPFTest.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="Window2.xaml"> <Application.Resources> </Application.Resources> </Application>
调试过程中的一个问题:
错误一:ExecuteNonQuery (或者ExecuteReader): Connection property has not been initialized
缺少参数:
下面是网上的摘抄:
using (SqlConnection conn = SqlHelper.GetSqlConnection())
{
conn.Open ();
//Create table.
using (SqlCommand cmd = new SqlCommand (_cmdCreateTable))
{
cmd.ExecuteNonQuery ();
}
}
估计一下子还真不容易看出来,那就是
new SqlCommand (_cmdCreateTable)
缺少第二个参数:SqlConnection!
错误二:过程或函数 'xxx' 需要参数 '@xxx',但未提供该参数
这个可能原因就更多了,不过到后来我都排除了,最后发现是没有将SqlCommand对象的CommandType设为StoredProcedure! 真是囧了。不过还是挺奇怪的,毕竟没有设的话默认是Text,也就是说它会将存储过程名称当做SQL语句,那此时应该是它不需要参数而我给了参数(原本要传给存储过程的),所以这个错误信息实在是。。。
相关推荐
wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf示例wpf...
总结来说,“wpf mvvm设计模式示例”是一个演示如何在WPF中运用MVVM模式的实例,它通过一个简单的列表展示了MVVM模式的基本结构和工作原理,包括模型、视图、视图模型的职责划分,数据绑定、命令以及依赖属性和...
在本文中,我们将深入探讨`WPFDataGrid`和`LINQ to SQL`技术,并通过一个实际的示例程序来阐述它们如何协同工作。`WPFDataGrid`是Windows Presentation Foundation(WPF)框架中的一个控件,用于展示数据集并在用户...
本示例中的"LoginDemo"是基于WPF和MVVM模式的一个登录窗口应用,涵盖了多个关键知识点。 1. **MVVM模式基础**:MVVM模式的核心在于ViewModel,它是View和Model之间的桥梁。ViewModel通过属性和命令暴露其功能,View...
在ImageGallery_Ex01这个示例项目中,你可能会找到一个简单的拖放图片应用程序。代码可能包括一个或多个Canvas元素,用于接收拖放的图片;使用IDataObject实现拖放逻辑;定义样式以改变被拖放图片的外观;以及可能...
在本示例中,我们将深入探讨如何利用WPF来创建一个基本的记事本程序。这个程序将会包括常见的文本编辑功能,如打开、保存、复制、粘贴等。 ### WPF基础 WPF是基于XAML(Extensible Application Markup Language)...
标题"wpf路由事件简单示例"指向了一个演示如何使用路由事件的实际应用,即模拟牧场农场跳转。这个场景可能是一个简单的用户界面,通过点击按钮或执行其他交互来展示不同的农场场景。 路由事件分为三种类型:...
这个“微软WPF示例源码大全”集合包含了一系列官方示例,涵盖了WPF的多个核心功能和特性,对于开发者来说,是深入理解和学习WPF技术的宝贵资源。 1. **WPFHostingWin32Control.zip**: 这个示例展示了如何在WPF...
9. **DrawToolsWPF2010.rar** - 类似于上一个示例,这可能是另一个画板应用,可能包含更多的绘图工具和功能,适用于2010版的WPF环境。 10. **窗体页面切换.rar** - 这个示例可能涉及到WPF中的导航架构,展示了如何...
这个“WPF-MVVM-简单示例”是一个很好的学习资源,它展示了如何利用MVVM模式、LINQ和WPF的数据绑定特性来构建一个功能齐全的应用程序。通过理解并实践这个示例,开发者可以更好地掌握现代WPF开发的核心技术,为更...
本示例聚焦于如何重写常见控件(如Button, TextBox, ListBox等)的ControlTemplate,这对于WPF初学者来说是一个极其有益的学习资源。通过理解并实践这些例子,你可以深入理解WPF的模板化系统,并能够创建出独具特色...
"WPF照片查看器示例"是一个展示如何在WPF应用中实现高效、交互式的图片浏览功能的经典代码实例。 1. **WPF中的Image控件** WPF提供了`Image`控件,用于显示位图、图标和其他图像资源。在WPF照片查看器中,`Image`...
在本文中,我们将深入探讨如何使用Windows Presentation Foundation (WPF)技术来创建具有...这个基于WPF技术的Chart示例是一个很好的起点,对于希望在WPF应用中实现数据可视化的开发者来说,无疑是一份宝贵的参考资料。
在这个名为“WPF示例代码”的压缩包中,我们可能找到了一个关于如何使用ObjectDataProvider和MultiBinding的实际应用案例。文件名“WPF_Color”可能暗示了这是一个涉及颜色处理的例子,可能是如何根据多个输入(如...
总结起来,这个"WPF版本Visifire图表示例"项目是一个很好的学习资源,展示了如何在WPF应用中利用Visifire库创建美观且功能丰富的图表。通过理解和实践这个示例,开发者可以更好地掌握WPF图表的实现方法,并将其应用...
WPF还支持嵌套布局,即在一个布局管理器内部使用另一个布局管理器。这种方式可以组合多种布局的优点,实现更复杂的界面设计。 9. AutoSize和Min/MaxSize属性: 在每个布局中,控件的Size属性都可以设置为自动(Auto)...
综上所述,"wpf google map v3 示例"是一个展示如何在WPF中集成Google Maps API V3并实现动态添加标记的示例。它涵盖了WPF WebBrowser控件的使用、JavaScript与C#的交互、Google Maps API的API调用等多个技术点,...
在“wpf全面资料含示例”这个压缩包中,我们可以期待找到关于WPF的全面学习资料,包括理论知识和实践示例。通过深入学习这些内容,开发者可以掌握WPF的核心概念和技术,从而高效地创建出美观且功能强大的Windows桌面...
**WCF** 是一个全面的、统一的框架,用于构建面向服务的应用程序。它允许开发者通过多种协议(如HTTP、TCP、MSMQ等)和各种传输机制来创建、发布、发现和调用服务。`BJCreation.Courseware.BLL`可能包含了业务逻辑层...