.net 问题与解决
问题一:
SqlConnection conn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlDataAdapter da = new SqlDataAdapter("SELECT say FROM 口号", conn);
DataSet ds = new DataSet();
da.Fill(ds, "kh");
z.DataSource=ds.Tables["kh"].DefaultView;
z.DataBind();
原因与解决方法:
引入名词空间
using System.Data.SqlClient;
using System.Configuration;
*******************************************************************************************************************
问题二:
用microsoft visual studio.net 向导,先是不了数据,不信大家可以试试,下面是我的具体步骤:
1。在工程中新建一个web用户控件:testGrid.ascx
2。往页面中拖放一个SqlDataAdaper,出现一个对话框配置SqlDataAdaper1,
3。点击“下一步”;选择数据连接(我已经有数据连接了,所以从下拉列表中选一项)
4。点击“下一步”选择“使用sql语句”
5。点击“下一步”,点击“查询生成器”选择我想要datagrid显示的表,
6。点击“完成”程序自动生成一个sqlConnection1
7。选中SqlDataAdaper1,点“生成数据集”,接受默认设置,点“确定”,程序自动生成dataSet11
8。!!往页面拖放DataGrid,ID 为DataGrid1
9。选中DataGrid1,点“属性生成器”,设置DataGrid1的属性:
数据源:dataSet11
列: 编辑,更新,取消,---选定的列中把我不想用户编辑的字段的字段设置为“只读”,这是为什么我要使用向导的原因,因为我要是简单的按照emilycsdn(emily)的步骤来的话程序把我的唯一标示的字段也设置为可编辑的状态,这是我不想要的。这时候aspx中关键部分代码为
<asp:DataGrid id="DataGrid1" runat="server" DataKeyField="Type_ID" DataMember="UnitType" EditItemIndex="0">
<Columns>
<asp:BoundColumn DataField="Type_ID" ReadOnly="True" HeaderText="Type_ID"></asp:BoundColumn>
<asp:BoundColumn DataField="Type_Name" HeaderText="Type_Name"></asp:BoundColumn>
<asp:BoundColumn DataField="Type_comment" HeaderText="Type_comment"></asp:BoundColumn>
<asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" CancelText="取消" EditText="编辑"></asp:EditCommandColumn>
</Columns>
</asp:DataGrid>
解决方法:
虽然已将datagrid服务器控件绑定到我们所创建的数据集,但是数据集本身并不会自动填入;相反地,你必须在调用数据适配器方法来自动填入数据集,即使填入数据集后
datagrid 服务器控件不会自动显示数据,你必须将datagrid服务器控件绑定其数据源
在Page_Load中写
sqlConnection1.Open();
sqlDataAdapter1.Fill(dataSet11);
DataGrid1.DataBind();
即可!
****************************************************************************************************************************
问题三:
sqlconnection连接失败,(用属性生成器时)
解决方法:
ConnectinString:server=localhost;uid=sa;pwd=sa;database=test
****************************************************************************************************
问题四;
如何除掉datagrid属性生成器中多余的列
解决方法:
我们去掉“在运行时自动创建列”前面的钩,这样,系统不再自动创建列,而只显示你绑定的列。
*******************************************************************************************
定制DataGrid的外观:
1、选择要显示的列:
在默认的情况下,我们在DataGrid中显示的列就是我们在执行Sql查询语句的时候查询出来的列,什么意思呢?如果我们用Select * from myTable,那么,将会显示所有的列,如果,我们用Select field1,field2 from mytable那么就只显示两个列。所以,在Datagrid中要选择你要显示的列,最简单的方法不是修改属性来完成,而是通过修改Sql查询语句来完成。
还有一个小问题,就是,我们在设计数据库的时候,字段的名称往往是英文的,但是,我们有想在DataGrid中使用中文,我们就需要在select语句中给每个字段取一个中文的别名,比如:Select Name As 姓名,cardid as 工号 from mytable。
有时候,我们不方便用这种方式来选择我们要显示的列,那么,我们就使用属性生成器来设置好了。
在设计视图中,选中DataGrid,然后 “属性窗口”的最下方就会有“属性生成器”的链接,点击这个链接(或者找到columns属性),会弹出一个对话框,我们就可以通过这个对话框来设置要选择的列了:
首先,我们去掉“在运行时自动创建列”前面的钩,这样,系统不再自动创建列,而只显示你绑定的列。
段
单击左侧的“列”,在右边就出现了“绑定列”“按钮列”等等,这里我们要选择“绑定列”。加入一个绑定列,然后,分别填写“页眉文本”等项目。页眉文本指的是页标题,“数据字段”填写你要显示的字段名称。然后,你要绑定几个字段,就选择几个绑定列。
2、修改DataGrid的样式
默认情况下的DataGrid画出来的表格很难看,所以,我需要定制它的样式。选中DataGrid,属性窗口中的最下方就会出现一个“自动套用格式”的链接,单击这个链接,就会弹出一个让你选择格式的对话框,选择你中意的格式。
我不知道你会怎么认为,反正,我觉得这里面有两种格式很合我的胃口,并且,也符合公司的设计规范,所以,我往往会使用这些格式。如果你还不满意,那么你就需要自己定制了。自己定制也很简单,就是,你去修改“样式”类的属性值就可以了。另外,你还可以通过属性生成器来完成样式属性的修改。比如,你不想让你的表格回行,那么,你就到属性生成器中,选择“格式”,然后,在右边选择“项”,把各个分项中的“单元格内文本换行”前面的钩去掉就ok了。
*******************************************************************************************************************************
动态加载用户控件:
想要用程序控制方法给web form网页加入用户控件,依照布凑进行
1:先将欲动态加入用户控件的web form的网页的。aspx文件切换到html视图,然后在顶端使用语法如下的@Reference指令语句来登陆用户控件:
<%@Reference Control="pathtofile"%>
@Reference指令能够让你以动态方法编译与链接用户控件,并将它加至网页的ControlCollection对象中,此举可以让你在调用LoadControl方法之后,将返回的类型转换。比方说,如果你要使用MyFirstWebUserControl.ascx,请这样写:
<%@Reference Control="MyFirstWebUserControl.ascx"%>
2:在代码后置类文件(web form.cs)文件中,建立用户控件实例,并视需要设置用户控件的相关属性,写法如下:
UserControl mycontrol=(UserControl)LoadControl("MyFirstWebUserControl.ascx");
((MyFirstWebUserControl)mycontrol).Backcolor="red";
((MyFirstWebUserControl)mycontrol).Forecolor="Yellow";
page.Controls.Add(mycontrol);
如果使用add方法将用户控件加至ControlConnection对象,它们会被放到集合中的结尾。如果你希望将用户控件加至集合中
特定的索引位置,请使用AddAt方法。
或者利用容器:Panel利用容器可以有效地控制控件的位置:
Panel1.Controls.Add(mycontrol);
***********************************************************************************************888