Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,aspx文件:
<asp:UpdatePanel ID=”UpdatePanel2″ runat=”server”>
??????????????????????? <ContentTemplate>
??????????????????????????? <asp:TextBox ID=”txtModel” Text=”” runat=”server” Width=”130px” CssClass=”MustInputText”></asp:TextBox>
?????????????????????????? <asp:Panel CssClass=”ContainPanel” ID=”Panel2″ runat=”server”? Width=”130px”
??????????????????????????????? Style=”visibility: hidden” >
??????????????????????????????? <asp:GridView ID=”gdModel” runat=”server” ShowHeader=”False” BorderWidth=”0px” OnRowCreated=”gdModel_RowCreated”>
??????????????????????????????? </asp:GridView> //当可选时用GridView获取数据库数据,用来显示下拉框
??????????????????????????? </asp:Panel>
??????????????????????????
??????????????????????????? <cc1:DropDownExtender ID=”DropDownExtender2″ runat=”server” DropDownControlID=”Panel2″
??????????????????????????????? TargetControlID=”txtModel” Enabled=”true”>
??????????????????????????? </cc1:DropDownExtender>
??????????????????????????? <cc1:AutoCompleteExtender ID=”AutoCompleteExtender3″ runat=”server” TargetControlID=”txtModel”? CompletionInterval=”100″? //触发时间
??????????????????????????????? CompletionSetCount=”10″ EnableCaching=”true” MinimumPrefixLength=”1″ ServiceMethod=”GetModelList1″
??????????????????????????????? ServicePath=”~/WebService/AutoCompleteService.asmx”>
??????????????????????????? </cc1:AutoCompleteExtender>? //AutoComplete用来自动填充功能
??????????????????????? </ContentTemplate>
??????????????????? </asp:UpdatePanel>

注:DropDownExtender :用来在下拉时填充。主要是为TxtBox增加下拉功能,显示的内容来自 DropDownControlID, DropDownControlID用来指向用什么块显示,TargetControlID用来指向哪个控件触发,事件为点击。

?????? AutoCompleteExtender :用来输入时自动带出数据库中的相关提示。TargetControlID指向哪个控件触发,事件为输入。当输入时,调用webservice,执行ServiceMethod方法,返回string[]数组,用来显示下拉的内容如:
public string[] GetModelList1(string prefixText, int count)??????? //prefixText名称保持不变
??? {
??????? ProductBL _ProductBL = new ProductBL();
??????? SqlDataReader dr = _ProductBL.GetModelsByCategory(“乐知购”);
??????? DataTable dt = new DataTable();
??????? dt.Load( dr );
??????? List<String> Models = new List<string>(dt.Rows.Count);
??????? for (int i = 0; i < dt.Rows.Count; i++)
??????? {
??????????? Models.Add(dt.Rows[i][“Model”].ToString());
??????? }

??????? List<String> returnlist = new List<string>();
??????? foreach( string s in Models ){
??????????? if ( s.IndexOf(prefixText)!= -1 ){
??????????????? returnlist.Add(s);
??????????? }
??????? }
???????
??????
??????? return returnlist.ToArray();
??? }

注:(1)要想用此控件,要引入AjaxControlToolkit.dll
?????? (2)页面上放置: <asp:ScriptManager ID=”ScriptManager1″ runat=”server”>? </asp:ScriptManager>

2, 两个控件都启作用时会乱,一般进行控制,当一定条件时enabled = false;


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

DateTime.Now.ToString(“yyyy-MM-dd”);??????????????? //2009-08-14
DateTime.Now.ToString(“yyyy/MM/dd HH:mm:ss”); //2009-08-14 15:57:12″

ToString 按指定形式转换 DateTime.Now.ToString(“aaaaa”) ; 输出aaaaa 除非在参数中指定了特定的格式。如:
年:yyyy 2009, yyy 2009, yy 09, y 9
月: MM 08 (不是mm的原因是mm代表时间中的分钟)
日:dd: 14
时:HH: 16 (以24小时制) hh:04 (12小时制)
分:mm
秒:ss

即时间控制都用小写,除非是重合的MM与mm, 及小时。

//2009年09月18 17时55分48秒
? System.DateTime.Now.ToString(“yyyy年MM月dd HH时mm分ss秒”);

??? 12345.ToString(“n”); //生成 12,345.00
??? 12345.ToString(“C”); //生成 ¥12,345.00
??? 12345.ToString(“p”); “1,234,500.00%”


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

DataAdapter:? 获取数据库中的数据
DataSet, SqlDateReader, DataTable存储DataAdapter得来的数据。

1,通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。
??? SqlDataAdapter da = new SqlDataAdapter(cmd);
??? DataSet ds = new DataSet(); da.Fill(ds);

2, SqlDataReader的创建必须调用 SqlCommand 对象的 ExecuteReader方法,而不是用new

DataSet与DataReader区别:

  • DataReader使用时始终占用SqlConnection,在线操作数据库.DataSet则是将数据一次性加载在内存 中.支持数据库访问的断开连接模型.
  • DataReader每次只在内存中加载一条数据,节约内存.DataSet将数据全部加载在内存中.比较消耗内存.
  • DataReader单向只读.DataSet支持查询\修改\删除等操作,比较灵活.
  • DataReader提供了快速向前的游标风格的数据访问,故不能用来分页,分页时要转为DataTable
  • DataReader从名称就可看出数据是只读的
  • DataReader与 SqlCommand搭配.DataSet与DataAdapter 结合使用.

3,DataSet, DataReader数据的读取
??? (1)
????? DataSet利用DataTable读取
???????? DataTable dt =DataSet1Tables[0];
????????
??????????? foreach (DataRow row in dt.Rows)
??????????? {
??????????????? Console.wirte(row[“Name”] );
??????????? }

??? (2)
? ? ?? MySqlDataReader dr = _newsDA.GetData(1, 3, 0);
???????? while (dr.Read()){
? ? ? ? ? ? Console.wirte(dr[“Name”]);
???????????????????????? // 或者dr[“0”], dr.GetInt32(0);指定类型返回
???? }?
???? (3)
? ? ?? DataReader也可用DataTable读取
???? ? DataTable dt = new DataTable();
?????? dt.Load( DataReader1 );
???? load:用DataReader数据源的值填充 DataTable。如果 DataTable 已经包含行,则从数据源传入的数据将与现有的行合并。

4, DataTable 与 DataView
利用DataView可对数据进行排序,筛选,并保存结果视图。
?DataView DV = dt.DefaultView;
?DV.Sort = “department, amount desc”;

5, GridView 的DataSource 可以是DataSet, DataReader, DataTable, DataView


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,DataTable dt = GetData(iPageSize, iPageIndex).Tables[0];? //GetData(iPageSize, iPageIndex)返回DataSet
? dt.Columns.Add(“Detail”);? //增加栏位? 注意的一点是dt的列名大小写不敏感,源于sql语句大小写不敏感
??????????? foreach (DataRow row in dt.Rows)
??????????? {
??????????????? row[“Detail”] =”123″
??????????? }
??????????? return dt;
GridView1DataSource = dt;? //gridview datasource可以是dataset, 也可以是datatable
? //dt.Columns.Add(“Detail”); Detail默认为string类型,指定类型可用:
? ? ?? DataColumn column = new DataColumn(“pageBy”);
??????? column.DataType = System.Type.GetType(“System.Int32”);
??????? column.AutoIncrement = true;
??????? column.AutoIncrementSeed = 0;
??????? column.AutoIncrementStep = 1;
?????? column.DefaultValue = 0;
??????? dt.Columns.Add(column);

加列
?DataRow srow = dt.NewRow();
??????????????? row[“OrderStatus”] = row[“OrderStatus”].ToString();
??????????????? row[“OrderNums”] = 1;
??????????????? row[“OrderAmounts”] = row[“Amount”].ToString();
?????????????? sdt.Rows.Add(srow);
2,排序
?DataView DV = dt.DefaultView;
?DV.Sort = “department, amount desc”;
//排序时注意的一点是列的类型,如amount若是string型,就不会按数字排序

//datatable是内存中的表,这个表可以增加,删除,update记录的,而dataview只是相当于视图,基本上是用来显示数据的,? 用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

?执行聚合函数:如sum,count
dt.Compute(“Sum(Total)”, “EmpID = 5”);
dt.Compute(“Sum(fenshu)”,”1=1″);?
注意没有count(*) count(1) 要指定具体的列
Sum(expression)中expression要注意的是:
1,expression这个参数中的列名不能是数字开头,否则就会报这个错。(这个很难排查出来。。。)
2,expression参数中字段的数据类型问题,例如Sum(字符类型)就会报这个错。

3,查询,取部分数据集
?? ?string expression = “Date > ‘1/1/00′”;
?? ?string sortOrder = “CompanyName DESC”;
?? ?DataRow[] foundRows = table.Select(expression, sortOrder); //查询带排序
?? (1)取部分行
?DataView davTemp = new DataView(datSource, “过滤条件”, “排序字段”, DataViewRowState.各种 状态);
//把过滤后的表赋给新表
DataTable datNew = davTemp.ToTable();
(2)取部分列
DataTable dat = YourDataTable.DefaultView.ToTable(false, new string[] { “你要的列名”, “你要的列名” });
false : 不去掉重复行
(3)删除列
YourDataTable.Columns.Remove(“列名”);

4,设主键
?? DataTable dt = new DataTable();
??????? dt.Columns.Add(“id”);
??????? dt.Columns.Add(“PartName”);
??????? dt.Columns.Add(“Style”);
??????? dt.Columns.Add(“quantity”);
??????? dt.Columns.Add(“Unit”);
??????? DataColumn dc1 = new DataColumn(“Amount”,typeof(float));
??????? dtAll.Columns.Add(dc1);
??????? //增加主键
??????? DataColumn[] columns = new DataColumn[2];
??????? columns[0] = dt.Columns[“id”];
??????? columns[1] = dt.Columns[“Style”];
??????? dt.PrimaryKey = columns;

按主键查询:
? object[] findTheseVals = new object[2];
?? findTheseVals[0] = id;
?? findTheseVals[1] = Style;
?? DataRow dr = dt.Rows.Find(findTheseVals);

两个DataTable合并: merge
dt1.Merge(dt2,true);
//true指示当dt2存在与dt1相同的主键值时dt1是否不修改,当为false时用dt2更新dt1, 要牢记的是同一个table中主键必须要保持唯一,若只想两个table简单的合在一起,那要在merge之前将两个DataTable的主键去掉,如:dt1.PrimaryKey = null;

DISTINCT

DataTable dataTable;

DataView dataView = dataTable.DefaultView;

DataTable dataTableDistinct = dataView.ToTable(true,”FieldName1″,”FieldName2″,”…”);

//注:其中ToTable()的第一个参数为是否DISTINCT
1,DataTable dt = GetData(iPageSize, iPageIndex).Tables[0];? //GetData(iPageSize, iPageIndex)返回DataSet
? dt.Columns.Add(“Detail”);? //增加栏位? 注意的一点是dt的列名大小写不敏感,源于sql语句大小写不敏感
??????????? foreach (DataRow row in dt.Rows)
??????????? {
??????????????? row[“Detail”] =”123″
??????????? }
??????????? return dt;
GridView1DataSource = dt;? //gridview datasource可以是dataset, 也可以是datatable
? //dt.Columns.Add(“Detail”); Detail默认为string类型,指定类型可用:
? ? ?? DataColumn column = new DataColumn(“pageBy”);
??????? column.DataType = System.Type.GetType(“System.Int32”);
??????? column.AutoIncrement = true;
??????? column.AutoIncrementSeed = 0;
??????? column.AutoIncrementStep = 1;
?????? column.DefaultValue = 0;
??????? dt.Columns.Add(column);

加列
?DataRow srow = dt.NewRow();
??????????????? row[“OrderStatus”] = row[“OrderStatus”].ToString();
??????????????? row[“OrderNums”] = 1;
??????????????? row[“OrderAmounts”] = row[“Amount”].ToString();
?????????????? sdt.Rows.Add(srow);
2,排序
?DataView DV = dt.DefaultView;
?DV.Sort = “department, amount desc”;
//排序时注意的一点是列的类型,如amount若是string型,就不会按数字排序

//datatable是内存中的表,这个表可以增加,删除,update记录的,而dataview只是相当于视图,基本上是用来显示数据的,? 用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。

?执行聚合函数:如sum,count
dt.Compute(“Sum(Total)”, “EmpID = 5”);
dt.Compute(“Sum(fenshu)”,”1=1″);?
注意没有count(*) count(1) 要指定具体的列
Sum(expression)中expression要注意的是:
1,expression这个参数中的列名不能是数字开头,否则就会报这个错。(这个很难排查出来。。。)
2,expression参数中字段的数据类型问题,例如Sum(字符类型)就会报这个错。

3,查询,取部分数据集
?? ?string expression = “Date > ‘1/1/00′”;
?? ?string sortOrder = “CompanyName DESC”;
?? ?DataRow[] foundRows = table.Select(expression, sortOrder); //查询带排序
?? (1)取部分行
?DataView davTemp = new DataView(datSource, “过滤条件”, “排序字段”, DataViewRowState.各种 状态);
//把过滤后的表赋给新表
DataTable datNew = davTemp.ToTable();
(2)取部分列
DataTable dat = YourDataTable.DefaultView.ToTable(false, new string[] { “你要的列名”, “你要的列名” });
false : 不去掉重复行
(3)删除列
YourDataTable.Columns.Remove(“列名”);

4,设主键
?? DataTable dt = new DataTable();
??????? dt.Columns.Add(“id”);
??????? dt.Columns.Add(“PartName”);
??????? dt.Columns.Add(“Style”);
??????? dt.Columns.Add(“quantity”);
??????? dt.Columns.Add(“Unit”);
??????? DataColumn dc1 = new DataColumn(“Amount”,typeof(float));
??????? dtAll.Columns.Add(dc1);
??????? //增加主键
??????? DataColumn[] columns = new DataColumn[2];
??????? columns[0] = dt.Columns[“id”];
??????? columns[1] = dt.Columns[“Style”];
??????? dt.PrimaryKey = columns;

按主键查询:
? object[] findTheseVals = new object[2];
?? findTheseVals[0] = id;
?? findTheseVals[1] = Style;
?? DataRow dr = dt.Rows.Find(findTheseVals);

两个DataTable合并: merge
dt1.Merge(dt2,true);
//true指示当dt2存在与dt1相同的主键值时dt1是否不修改,当为false时用dt2更新dt1, 要牢记的是同一个table中主键必须要保持唯一,若只想两个table简单的合在一起,那要在merge之前将两个DataTable的主键去掉,如:dt1.PrimaryKey = null;

DISTINCT

DataTable dataTable;

DataView dataView = dataTable.DefaultView;

DataTable dataTableDistinct = dataView.ToTable(true,”FieldName1″,”FieldName2″,”…”);

//注:其中ToTable()的第一个参数为是否DISTINCT


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
原理:在DataTable中构造一个pageBy 自增字段,, 根据页面传来的值查出当前行对应的pageBy,那么减1就是上一条,加1就是上一条, 实际是为DataTable的Row实现索引。
1,构造索引:pageBy
        DataTable pd = dt.Clone();  //dt为数据表
        DataColumn column = new DataColumn("pageBy");
        column.DataType = System.Type.GetType("System.Int32");
        column.AutoIncrement = true;
        column.AutoIncrementSeed = 1;
        column.AutoIncrementStep = 1;
        pd.Columns.Add(column);
        DataColumn[] columns = new DataColumn[1];
        columns[0] = column;
        pd.PrimaryKey = columns;
        
        foreach (DataRow dr in dt.Rows) {
            pd.ImportRow(dr);  //引入数据
        }
  Session["pageData"] = pd; //存入Session中,以便查询

2,列表页面传来选中行的实际id, 查出pageBy
        DataTable dt = (DataTable)Session["pageData"];
        DataRow[] drs = new DataRow[1];
        drs = dt.Select("id=" + allocateid);   //根据页面传来的id查出pageBy
        if (drs.Length > 0)
        {
            int pageIndex = int.Parse(drs[0]["pageBy"].ToString());
            //上一页Callback.aspx?allocateid=226&customerid=67
            drs = dt.Select("pageBy=" + (pageIndex -1).ToString() );
            if (drs.Length <= 0)
            {
                hlPrevious.Text = "上一条:没有了";
            }
            else {
                hlPrevious.Text = "上一条:" + drs[0]["CustomerName"].ToString();
                hlPrevious.NavigateUrl = "Callback.aspx?allocateid=" + drs[0]["id"] + "&customerid=" + drs[0]["CustomerID"];
            }
            //下一页
            drs = dt.Select("pageBy=" + (pageIndex + 1).ToString());
            if (drs.Length <= 0)
            {
                hlNext.Text = "下一条:没有了";
            }
            else
            {
                hlNext.Text = "下一条:" + drs[0]["CustomerName"].ToString();
                hlNext.NavigateUrl = "Callback.aspx?allocateid=" + drs[0]["id"] + "&customerid=" + drs[0]["CustomerID"];
            }


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

<% # Eval(“Name”) %>
<% # Bind(“Name”) %>

eval:。在运行时,Eval 方法调用 DataBinder 对象的 Eval 方法,等同于:DataBinder.Eval(Container.DataItem, “Address”)
方法在运行时使用反射执行后期绑定计算,因此与标准的ASP.NET数据绑定方法bind相比,会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法

Eval?方法是静态(只读)方法,该方法采用数据字段的值作为参数并将其作为字符串返回。、Bind?方法支持读/写功能,可以检索数据绑定控件的值并将任何更改提交回数据库。

比较:
<asp:LinkButton ID=”lbnReturnToday” runat=”server”
Enabled? = ‘<%#? Eval( “account” ).Equals(“lichong”)?false:true %>’ CommandName=”returnAllocateToday” CommandArgument='<%# Eval(“account”) %>’>回收当天分配</asp:LinkButton>


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,  <asp:HyperLinkField DataTextField="CustomerName" DataNavigateUrlFields="id,CustomerName" DataNavigateUrlFormatString="~/Customer/CustomerDetail.aspx?CustomerID={0}&CustomerName={1}"                             HeaderText="顾客姓名" /> 生成带超连接的一行信息, id, CustomerName为数据源中的字段,它们将分别填充到{0},{1}位置,DataTextField:指定链接显示的字段 带修改之类的可加button  <asp:LinkButton ID="lbtnEdit" runat="server" Text="修改" CommandName="Edit" CommandArgument='<%# Eval("orderno") %>'>                                                                                           </asp:LinkButton> CommandName  为要执行的方法。

2,LinkButton  传多个参数:                   <asp:TemplateField HeaderText="销售人员" ItemStyle-HorizontalAlign="Left" ItemStyle-Width="12%">                     <ItemTemplate>                         <asp:LinkButton ID="lbtnCConfirm" runat="server" Text='<%# Eval("SalesStaff") %>'                             CommandName="StaffShow" CommandArgument=<%# Eval("id")+","+Eval("SalesStaff") %> >                                                                                   </asp:LinkButton>                     </ItemTemplate>                 </asp:TemplateField>      <asp:Button ID="btnSave" runat="server" Text="保存" CssClass="btn2" /> 后台在gvTotal_RowCommand方法中通过e.CommandArgument.ToString().Split(',')来分开。 asp:Button 与上类似,若想用CommandArgument传参,可在其onCommand中接收,而不是在onClick事件中。 利用onCommand的原因是:页面中有许多button,想在同一个方法中处理其点击事件,可令每个按纽的onCommnad指向同一个方法,并设置CommandArgument参数,这样在onCommnad中就可依据此参数来对不同的按纽做相应的操作,达到集中处理的目的。 注:若是在GridView中,多个onCommand可指向同一个自定义事件,或者利用GridView提供的gvTotal_RowCommand方法也可,其实是同一个。 Eval:  CommandArgument=<%# Eval("OrderNo") + "," + Container.DataItemIndex %> /> DataItemIndex 传当前行号 注:HyperLink传参为: <asp:HyperLink ID="hlDetail" runat="server" NavigateUrl='<%# "followhistoryrecord.aspx?allocateid="+ Eval("id")%>'>明细..</asp:HyperLink>

3, 利用TemplateField引用非数据源控件   (1) <asp:GridView ID="gdCancel" runat="server" AutoGenerateColumns="False"             CssClass="grid" onrowcreated="gdCancel_RowCreated" DataKeyNames="id" Height="80%">         <HeaderStyle CssClass="gridHeader"></HeaderStyle>         <RowStyle CssClass="gridItem" />         <Columns>               <asp:TemplateField HeaderText="选择" >                  <ItemStyle Width="25%" HorizontalAlign="Center" />                   <ItemTemplate>                     <asp:CheckBox ID="chkItem" runat="server" onclick="Select(this);"/>                   </ItemTemplate>      </asp:TemplateField>   </Columns>         </asp:GridView> 注:也可加在标题处         <asp:TemplateField ItemStyle-BorderColor="Black" ItemStyle-BorderWidth="1" HeaderStyle-BorderWidth="1" HeaderStyle-BorderColor="Black">                                         <ItemStyle Width="5%" HorizontalAlign="Center" />                                         <HeaderTemplate>                                           <%–  <input type="checkbox" id="chkAll1" onclick="CheckAll( this );" />–%>                                           选择                                         </HeaderTemplate>                                         <ItemTemplate >                                             <asp:CheckBox ID="chkItem" runat="server" />                                         </ItemTemplate>                                     </asp:TemplateField>. /*选择所有 checkbox */ function CheckAll(chkAll)     {           var obj = document.aspnetForm.getElementsByTagName("input");         // var chck1 = document.getElementById( "chkAll1" );         // var chck2 = document.getElementById( "chkAll2" );         // chck1.checked = chkAll.checked;         // chck2.checked = chck1.checked;                            for (var i=0;i<obj.length;i++)             {                             var e = obj[i];                 if (e.id.indexOf("chkItem")>=0 && e.type=="checkbox")                     e.checked = chkAll.checked;             }                                 } (2) 在类文件中操作此控件可用:   CheckBox ck  = (CheckBox)gdCancel.Rows[i].FindControl("chkItem"); 得到每行数据的主键可用:gdCancel.DataKeys[i].Value.ToString())            DataKeys 用DataKeyNames指定 (3) //遍历   foreach (GridViewRow vr in gdCustomer.Rows) {                 foreach( TableCell tc in vr.Cells ){                     Console.Write(tc.Text);        //此时的Cell为控件,可设置背景等属性                 }                 }                }           //GridView只是一个数据显示控件,不是数据存储控件如:DataSet,故它可抓取的数据是它所能显示的数据。 (4) 获取当前行的数据:   if (e.Row.RowType == DataControlRowType.DataRow) {                //e:GridViewRowEventArgs      gdCancel.Rows[gdCancel.SelectedIndex].Cells[1].Text } 注:DataControlRowType:数据控件中行的类型,只有DataRow才会有数据  Header 数据控件的标题行。标题行不能绑定数据。  Footer 数据控件的脚注行。脚注行不能绑定数据。  DataRow 数据控件的数据行。只有 DataRow 行能绑定数据。  Separator 行分隔符。行分隔符不能绑定数据。  Pager 显示页按钮或页导航控件的行。页导航行不能绑定数据。  EmptyDataRow 显示页按钮或页导航控件的行。页导航行不能绑定数据。

4, 为行增加动作。如鼠标经过时变色:  protected void gdCancel_RowCreated(object sender, GridViewRowEventArgs e)     {         if (e.Row.RowType == DataControlRowType.DataRow) {             e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;d=this.style.color;this.style.backgroundColor='#348E37';this.style.color='#ffffff';");             e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c;this.style.color=d;");            //e.Row.Attributes.Add("style", "background-color:red");         }     }

5,根据逻辑在数据绑定时做一些事情  protected void gdCustomer_RowDataBound(object sender, GridViewRowEventArgs e)     {         if (e.Row.RowType == DataControlRowType.DataRow)         {             LinkButton lbtnEdit = (LinkButton)e.Row.FindControl("lbtnEdit");             if (OperateType == "FIRST" && ddlCustomerType.SelectedItem.Value.Trim().IndexOf("distribute") < 0)             {                 lbtnEdit.Enabled = false;             }         }     } 注:在页面级处理的方法为:<%# DataBinder.Eval(Container.DataItem, "DepartmentId").ToString() == "6" ? "增值服务部" : "客户发展部    "%> 控制日期显示长度:<%# DataBinder.Eval(Container.DataItem, "OrderDate", "{0:yyyy-MM-dd}")%>       等同于<% # Eval(“OrderDate”, “{0:yyyy-MM-dd}” ) %> 控制字符串长度  <ItemStyle HorizontalAlign="Left" Width="15%"></ItemStyle>                                 <ItemTemplate>                                     <%# MySubString(DataBinder.Eval(Container.DataItem, "Address"),10)%>                                                                             </ItemTemplate>                             </asp:TemplateField> 在程序中定义MySubString方法进行处理 <%# DataBinder.Eval(Container.DataItem, "DepartmentId").ToString() == "6" ? "增值服务部" : "客户发展部    "%> 等同于<%# Eval("DepartmentId")%>  控制字段显示与否   gdCustomer.Columns[8].Visible = false;

6,GridView存额外数据,以备后用 当数据源绑定GridView时提供的数据只是GridView用DataField,或Eval指定的数据,若想存其它数据变通的方法是:   <asp:TemplateField HeaderText="广告来源">                 <ItemStyle Width="10%"></ItemStyle>                 <ItemTemplate>                  <asp:HiddenField Value=<%# Eval( "ADSource" ) %> runat=server ID="ADSource"/>                   <asp:DropDownList ID="ddlADSource" runat="server"></asp:DropDownList>                 </ItemTemplate>             </asp:TemplateField> 利用HiddenField存储数据, 在程序中通过((HiddenField)e.Row.FindControl("ADSource")).Value 来得到数据。 注:指定一BoundField,将其Visible设为false的方式是不行的,不会存储起数据。

7, 分页 GridView在分页状态下显示的数据条数为pagesize,而不是整个数据

8,根据逻辑显示若隐藏一列:dgOrder.Columns[9].Visible = false;隐藏之后无论查询的数据集中有没有相应的字段,都不会出错。 即:当将GridView的某一数据感应控件设为Visible之后,此控件将不参与GridView的DataBind方法。

9,编辑更新数据 (1)在gridview:AutoGenerateEditButton="True" 会自动生成编辑按纽,点编辑之后会将一行变成txtbox可编辑状态,编辑按纽变成取消与更新两个按纽,要添加相应的事件  //自动产生的按纽格式不要调整,可将AutoGenerateEditButton="False",同样为gridview增加OnRowEditing,OnRowCancelingEdit,OnRowUpdating事件,同时在每一行中增加<asp:TemplateField><ItemTemplate><asp:LinkButtonID="btnEdit" runat="server" CommandName="Edit" Text="修改" />         <asp:LinkButtonID="btnSave" runat="server" CommandName="Update" Text="保存" /></ItemTemplate></asp:TemplateField>   只要CommandName为对应的edit,update,cancel那么它们就会自动调用相应的 OnRowEditing,OnRowCancelingEdit,OnRowUpdating方法,同自动产生的按纽一样,不过更加灵活!

10,  OnClientClick传值时要将js函数写在Eval内: OnClientClick='<%# Eval("name","alert(\"{0}\")") %>' >   protected void gdCustomer_RowEditing(object sender, GridViewEditEventArgs e)     {    //编辑         gdCustomer.EditIndex = e.NewEditIndex;         BindGrid();     } protected void gdCustomer_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)     {         //取消编辑状态         gdCustomer.EditIndex = -1;         BindGrid();     } protected void gdCustomer_RowUpdating(object sender, GridViewUpdateEventArgs e)     {         //更新        sqlcon = new SqlConnection(strCon);         string sqlstr = "update 表 set 字段1='"             + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + "',字段2='"             + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + "',字段3='"             + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + "' where id='"             + GridView1.DataKeys[e.RowIndex].Value.ToString() + "'";         sqlcom=new SqlCommand(sqlstr,sqlcon);         sqlcon.Open();         sqlcom.ExecuteNonQuery();         sqlcon.Close();         gdCustomer.EditIndex = -1;         BindGrid();     } 注:若想指定某几行不可编辑可采用如下方式: (1)对指定的不可编辑的行做处理  protected void gdCustomer_RowDataBount(object sender, GridViewRowEventArgs e) {         if (e.Row.RowType == DataControlRowType.DataRow) {             if ("回访完毕".Equals(e.Row.Cells[2].Text))             {                 e.Row.Attributes.Add("disabled", "true"); //disabled这个属性会将一行设置成灰色             }         }     } (2)获取处理的方式:  protected void gdCustomer_RowEditing(object sender, GridViewEditEventArgs e)     {         foreach (string s in gdCustomer.Rows[e.NewEditIndex].Attributes.Keys)         {             if ("disabled".Equals(s)) {                 return;             }         }         gdCustomer.EditIndex = e.NewEditIndex;         BindGrid();     }

11. 加汇总 1)指定显示foot (ShowFooter="true" ),2)计算汇总数据 protected void gvEmployee_RowDataBound(object sender, GridViewRowEventArgs e) if (e.Row.RowType == DataControlRowType.Footer) { e.Row.Cells[0].Text = "统计:"; e.Row.Cells[8].Text = dt.Compute("sum(Quantity)", "").ToString(); e.Row.Cells[9].Text = dt.Compute("sum(PresentPrice2)", "").ToString(); //e.Row.Cells[3].Text = dt.Compute("sum(InPrice)", "").ToString(); //e.Row.Cells[4].Text = dt.Compute("sum(cbPrice)", "").ToString(); //e.Row.Cells[5].Text = dt.Compute("sum(OutPrice)", "").ToString(); //e.Row.Cells[6].Text = dt.Compute("sum(salePrice)", "").ToString(); } }

12 空数据时显示提示-EmptyDataText属性
dgOrder.EmptyDataText = string.Format("{0}不存在!", txtPackageNo.Text.Trim());


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,aspx是界面,其上控件可直接在.aspx.cs上直接用,前提是有 runat=”server”
如:, 那么在.cs这个类文件中可直接用txtCustomer来操作此控件
如:txtCustomer.value = “asong”

2, .cs内编写的函数可直接在aspx上应用。如.cs有一个取格式化数据的方法,FormatingStr, 则可在界面上用如下方式:
<%# FormatString(Eval("customer"), 4)%>: