.net学习笔记
1.对某一类型不确定时可以直接用Response.Write进行输出查看,可以直接输出类的类型.如可以在Repeater的ItemDataBound事件中直接输出Response.Write(e.Item.DataItem),即可看到输出为System.Data.Common.DbDataRecord,即e.Item.DataItem可以转化为System.Data.Common.DbDataRecord.
2.通常情况下,如果不是要求每次加载页面都执行一遍绑定代码,将绑定控件数据的代码放在!IspostBack中。另外如果在Page_Load中绑定TextBox\Button\DropDownList等,不管是否放在!IsPostBack中,页面都会顺利执行,不会出错,例外情况是,如果在Page_Load中绑定了Repeater控件,同时没有放在!IsPostBack中,页面执行则会出错:回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
3.在执行SQL语句时,尽量用参数化的SQL语句执行,在SQL参数中指定了参数类型后不用过滤单引号,只需判断对应的参数是否为相应的数据类型即可,即字符参数为字符,数字参数为数字。如果直接拼接SQL语句,如下例:SELECT * FROM NewsClass WHERE ClassName = ''公司动态',则会出错。
4.URI对象示例
view plaincopy to clipboardprint?
01.Uri uri = Request.UrlReferrer;
02.Response.Write(string.Format("获取URI:{0}{1}", uri, "<br>"));
03.Response.Write(string.Format("获取URI的绝对路径:{0}{1}", uri.AbsolutePath,"<br>"));
04.Response.Write(string.Format("获取绝对URI:{0}{1}", uri.AbsoluteUri, "<br>"));
05.Response.Write(string.Format("获取服务器的DNS主机名或IP地址和端口号:{0}{1}", uri.Authority, "<br>"));
06.Response.Write(string.Format("获取URI的主机部分:{0}{1}", uri.Host, "<br>"));
07.Response.Write(string.Format("获取URI中指定的主机名类型:{0}{1}", uri.HostNameType, "<br>"));
08.Response.Write(string.Format("指示是否绝对URI:{0}{1}", uri.IsAbsoluteUri, "<br>"));
09.Response.Write(string.Format("获取文件名的本地操作系统表示形式:{0}{1}", uri.LocalPath, "<br>"));
10.Response.Write(string.Format("获取用问号分隔的绝对路径和Query属性:{0}{1}", uri.PathAndQuery, "<br>"));
11.Response.Write(string.Format("获取主机端口号:{0}{1}", uri.Port, "<br>"));
12.Response.Write(string.Format("获取URI中包含的任何查询信息:{0}{1}", uri.Query, "<br>"));
13.Response.Write(string.Format("获取此URI的方案名称:{0}", uri.Scheme));
Uri uri = Request.UrlReferrer;
Response.Write(string.Format("获取URI:{0}{1}", uri, "<br>"));
Response.Write(string.Format("获取URI的绝对路径:{0}{1}", uri.AbsolutePath,"<br>"));
Response.Write(string.Format("获取绝对URI:{0}{1}", uri.AbsoluteUri, "<br>"));
Response.Write(string.Format("获取服务器的DNS主机名或IP地址和端口号:{0}{1}", uri.Authority, "<br>"));
Response.Write(string.Format("获取URI的主机部分:{0}{1}", uri.Host, "<br>"));
Response.Write(string.Format("获取URI中指定的主机名类型:{0}{1}", uri.HostNameType, "<br>"));
Response.Write(string.Format("指示是否绝对URI:{0}{1}", uri.IsAbsoluteUri, "<br>"));
Response.Write(string.Format("获取文件名的本地操作系统表示形式:{0}{1}", uri.LocalPath, "<br>"));
Response.Write(string.Format("获取用问号分隔的绝对路径和Query属性:{0}{1}", uri.PathAndQuery, "<br>"));
Response.Write(string.Format("获取主机端口号:{0}{1}", uri.Port, "<br>"));
Response.Write(string.Format("获取URI中包含的任何查询信息:{0}{1}", uri.Query, "<br>"));
Response.Write(string.Format("获取此URI的方案名称:{0}", uri.Scheme));
获取URI:http://127.0.0.1:8019/admin/test.aspx?Action=AddClass
获取URI的绝对路径:/admin/test.aspx
获取绝对URI:http://127.0.0.1:8019/admin/test.aspx?Action=AddClass
获取服务器的DNS主机名或IP地址和端口号:127.0.0.1:8019
获取URI的主机部分:127.0.0.1
获取URI中指定的主机名类型:IPv4
指示是否绝对URI:True
获取文件名的本地操作系统表示形式:/admin/test.aspx
获取用问号分隔的绝对路径和Query属性:/admin/test.aspx?Action=AddClass
获取主机端口号:8019
获取URI中包含的任何查询信息:?Action=AddClass
获取此URI的方案名称:http
5.gridview无数据时显示空表头。
下面代码放在Page_Load的!IsPostBack中;
view plaincopy to clipboardprint?
01.if (NewsDs.Tables[0].Rows.Count == 0)
02.{
03. NewsDs.Tables[0].Clear();
04. DataRow dr = NewsDs.Tables[0].NewRow();
05. NewsDs.Tables[0].Rows.Add(dr);
06. GridView1.DataSource = NewsDs;
07. GridView1.DataBind();
08. GridView1.Rows[0].Cells.Clear();
09. GridView1.Rows[0].Cells.Add(new TableCell());
10. GridView1.Rows[0].Cells[0].ColumnSpan = 5;
11. GridView1.Rows[0].Cells[0].Text = "没有记录";
12. GridView1.Rows[0].Cells[0].HorizontalAlign = HorizontalAlign.Center;
13. GridView1.FooterRow.Visible = false;
14.}
15.else
16.{
17. GridView1.DataSource = NewsDs;
18. GridView1.DataBind();
19.}
6.GridView行编辑功能相关
1.默认情况下,GridView可对BoundField类型的列进行编辑。代码如下:
<asp:BoundField DataField="ItemName" HeaderText="项目名称" ItemStyle-HorizontalAlign="left"
HeaderStyle-Width="20%" />
<asp:CommandField HeaderText="编辑" ShowEditButton="True" HeaderStyle-Width="10%" />
<asp:CommandField HeaderText="删除" ShowDeleteButton="True" HeaderStyle-Width="10%" />
2.也可以使用自定义编辑模板进行列编辑,这样做的一个好处是:可以格式化显示列值。代码如下:
<asp:TemplateField HeaderText="项目日期">
<ItemTemplate>
<%#Eval("AddTime","{0:yyyy-MM-dd}")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("AddTime","{0:yyyy-MM-dd}") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField HeaderText="编辑" ShowEditButton="True" HeaderStyle-Width="10%" />
<asp:CommandField HeaderText="删除" ShowDeleteButton="True" HeaderStyle-Width="10%" />
3.在CS文件中获取编辑项中的控件值,代码如下:
if ((e.Row.RowState & DataControlRowState.Edit)==DataControlRowState.Edit) //此行可判断是否为编辑状态
{
TextBox tb = e.Row.Cells[3].FindControl("TextBox1") as TextBox; //获取自定义编辑模板中控件的值
tb.Text = "test";
TextBox tb1 = e.Row.Cells[1].Controls[0] as TextBox; //获取BoundField中控件的值
tb1.Text = "test1";
}
4.如果需要在第一次加载时在CS文件中格式化显示列数据,可以使用if (!IsPostBack)进行判断,代码如下:
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (!IsPostBack)
{
e.Row.Cells[3].Text = string.Format("{0:yyyy-MM-dd}", drv["AddTime"]);
}
}
5.默认情况下,当点击编辑按钮时,删除按钮会不可见,设置其可见的方法为:
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
DataBinder();
GridView1.Rows[e.NewEditIndex].Cells[5].Text = "删除";
}
6.取消编辑的代码为:
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
DataBinder();
}
7.可以通过设置ValidationGroup来设置不同的BUTTON对应不同控件的验证,可以通过设置ValidationSummary来列表集中显示错误信息或以alert形式显示错误信息,代码如下:
<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr>
<td colspan="7" class="td_title">
添加项目</td>
</tr>
<asp:ValidationSummary ID="ValidationSummary1" ValidationGroup="AddItemGroup" runat="server" ShowMessageBox="True" ShowSummary="False" />
<tr>
<td width="8%" align="right">
项目名称:</td>
<td width="23%" style="width: 23%">
<asp:TextBox ID="ItemName" Columns="32" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="ItemName" ValidationGroup="AddItemGroup"
Display="none" SetFocusOnError="true" runat="server" ErrorMessage="请输入项目名称"></asp:RequiredFieldValidator>
</td>
<td width="8%" align="right" style="width: 8%">
项目金额:</td>
<td width="18%" style="width: 13%">
<asp:TextBox ID="Price" runat="server" Columns="12"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="Price" ValidationGroup="AddItemGroup"
Display="none" SetFocusOnError="true" runat="server" ErrorMessage="请输入项目金额"></asp:RequiredFieldValidator>
</td>
<td width="8%" align="right">
项目日期:</td>
<td width="18%" style="width: 6%">
<asp:TextBox ID="Addtime" runat="server" Columns="12" onfocus="new WdatePicker(this)"></asp:TextBox></td>
<td align="left">
<asp:Button ID="Button1" runat="server" Text=" 提 交 " OnClick="Button1_Click" ValidationGroup="AddItemGroup"/>
</td>
</tr>