★33°空間‰


                                 ----★七彩服飾  【最潮拜☆日單精品】【Esprit】【Hotwind】滿150包郵-女裝-流行女裝    www.7color.hb.cn

                                 ----智力比知識重要,素質比智力重要,覺悟比素質更重要
          posts - 110,comments - 35,trackbacks - 0

          DataGrid使用心得(附大量代碼)

          ??? 1. 為 DataGrid 控件設計樣式
          ???
          ??? 在<asp:datagrid id="DataGrid1" runat="server">之后添加如下代碼
          ???
          ??? <FooterStyle ForeColor="Black" BackColor="#CCCCCC"></FooterStyle>
          ??? <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#008A8C"></SelectedItemStyle>
          ??? <AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
          ??? <ItemStyle ForeColor="Black" BackColor="#EEEEEE"></ItemStyle>
          ??? <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#000084"></HeaderStyle>
          ???
          ??? 說明:
          ??? (1) 在每個標簽內主要是? ForeColor?? BackColor? Font-Bold 這幾個屬性值
          ???
          ??? 2. 為 DataGrid 控件添加綁定列
          ???
          ??? <asp:BoundColumn DataField="" ReadOnly="True" HeaderText=""></asp:BoundColumn>
          ??? 說明:
          ??? (1) 在標簽內的基本屬性是 DataField / HeaderText
          ??? (2) DataFormatString 用于 獲取或設置指定列中各項的顯示格式的字符串。
          ??? ?形式為 { A: Bxx }。例如,格式化字符串 {0:F2} 將顯示帶兩位小數的定點數。
          ??? ?其中A值只能設置為 0,因為每個單元格中只有一個值。
          ??? ?冒號后的字符(常規示例中為 B)指定值的顯示格式
          ??? ?C? 以貨幣格式顯示數值。
          ??????? D? 以十進制格式顯示數值。
          ??????? E? 以科學記數法(指數)格式顯示數值。
          ??????? F? 以固定格式顯示數值。
          ??????? G? 以常規格式顯示數值。
          ??????? N? 以數字格式顯示數值。
          ??????? X? 以十六進制格式顯示數值。
          ??? (3) Visible 獲取或設置一個值,該值指示此列在 DataGrid 控件中是否可見。
          ??? (4) ReadOnly 設置些列是否只讀,若是只讀的話,則不能修改.
          ??? (5) SortExpression 獲取或設置選擇進行排序的列時傳遞到 OnSortCommand 方法的字段或表達式的名稱。
          ??

          ??3. 為 DataGrid 控件添加模板列
          ??? <asp:TemplateColumn HeaderText="類別">
          ??? ?<ItemTemplate>
          ??? ??<asp:Label Text='<%# DataBinder.Eval(Container.DataItem, "actorclassname") %>' runat="server" ID="Label1"/>
          ??? ?</ItemTemplate>
          ??? ?<EditItemTemplate>
          ??? ??<select name="sltclassname">
          ??? ???<% = ActorClass.GetParentClass(0) %>
          ??? ??</select>
          ??? ?</EditItemTemplate>
          ??? </asp:TemplateColumn>
          ??? 說明:
          ??? (1) 基本框架是
          ??? ? <asp:TemplateColumn HeaderText="類別">
          ????<ItemTemplate></ItemTemplate>
          ??? ?</asp:TemplateColumn>
          ?? ?(2) 全面的模板列
          ?? ??<asp:TemplateColumn>

          ?????????????? <HeaderTemplate>
          ????????????????? <b> Tax </b>
          ?????????????? </HeaderTemplate>

          ?????????????? <ItemTemplate>
          ????????????????? <asp:Label
          ?????????????????????? Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
          ?????????????????????? runat="server"/>
          ?????????????? </ItemTemplate>

          ?????????????? <EditItemTemplate>

          ????????????????? <asp:CheckBox
          ?????????????????????? Text="Taxable"
          ?????????????????????? runat="server"/>

          ?????????????? </EditItemTemplate>

          ?????????????? <FooterTemplate>
          ????????????????? <asp:HyperLink id="HyperLink1"
          ?????????????????????? Text="Microsoft"
          ?????????????????????? NavigateUrl="http://www.microsoft.com"
          ?????????????????????? runat="server"/>
          ?????????????? </FooterTemplate>

          ??????????? </asp:TemplateColumn>
          ?(3) 為布爾型列應用模板列
          ??<asp:TemplateColumn>
          ??????? ?<ItemTemplate>
          ??????????? ?<asp:Label
          ??????????????? ? Text='<%# DataBinder.Eval(Container.DataItem, "Tax") %>'
          ???????????????????? runat="server"/>
          ??????????? </ItemTemplate>
          ??????????? <EditItemTemplate>
          ???????????? <asp:CheckBox
          ??? ????????????? Text="Taxable"
          ???????????????????? runat="server"/>

          ??????????? </EditItemTemplate>
          ??????? </asp:TemplateColumn>
          ??????? 在正常狀態,用 Label控件顯示
          ??????? 在編輯狀態,用 CheckBox控件顯示
          ???
          ?(4)?為枚舉類型列應用模板列,如業務地區(全網/廣東/云南等等)
          ??<asp:TemplateColumn HeaderText="處理方式">
          ???<ItemTemplate>
          ????<asp:Label ID="lbStatus">
          ?????<%# DataBinder.Eval(Container, "DataItem.DealWith") %>
          ????</asp:Label>
          ???</ItemTemplate>
          ???<EditItemTemplate>
          ????<asp:DropDownList id="dpStatus2" runat="server" DataTextField="status">
          ?????<asp:ListItem Value="Log">Log(日志)</asp:ListItem>
          ?????<asp:ListItem Value="SendSms">SendSms(短信)</asp:ListItem>
          ????</asp:DropDownList>
          ???</EditItemTemplate>
          ??</asp:TemplateColumn>
          ??在正常狀態,用 Label控件顯示
          ??在編輯狀態,用 DropDownList控件顯示
          ?
          ?(5) 為長字符串應用模板列,如一篇文章的內容
          ??還未做過
          ??
          ?4. 為 DataGrid 控件添加按鈕列
          ?
          ?<asp:ButtonColumn
          ??????? HeaderText="Remove from cart"
          ??????? ButtonType="PushButton"
          ??????? Text="Remove"
          ??????? CommandName="RemoveFromCart" />
          ??? (1) 要使用按鈕列,必須在 DataGrid 控件中添加 OnItemCommand 屬性,并為該事件添加處理方法.
          ??? (2) 模板列可以實現按鈕列能實現的任何功能.
          ???
          ??? 5. 為 DataGrid 控件添加編輯列
          ??? <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="更新" HeaderText="編輯" CancelText="取消" EditText="編輯"></asp:EditCommandColumn>
          ??? (1) ButtonType 有兩個值: LinkButton 超級鏈接樣式按鈕的列 | PushButton 普通按鈕的列。

          ?6. 為 DataGrid 控件添加超鏈接列
          ?<asp:HyperLinkColumn Text="添加子類" DataNavigateUrlField="ActorclassID" DataNavigateUrlFormatString="addActorClass.aspx?classID={0}"></asp:HyperLinkColumn>
          ?(1) 為每一行設置相同的文字及跳轉的URL地址
          ??設置 Text 和 NavigateUrl 屬性,則列中的所有超級鏈接將共享同一標題和 URL
          ?(2) 為每一行設置不同的文字及不同跳轉的URL地址
          ??A. ?用 DataTextField 設置數據源字段,若還想在原數據的基礎上加工一下(如字段值為300,想顯示為300元)
          ???則再設置 DataTextFormatString 字段
          ??B.?用DataNavigateUrlField 及 DataNavigateUrlFormatString 來設置URL地址
          ???用DataTextField = "money" DataTextFormatString = "{0}元"
          ??C.? 舉例
          ???DataNavigateUrlField="ActorclassID" DataNavigateUrlFormatString="addActorClass.aspx?classID={0}"
          ???
          ?7. 為 DataGrid 控件添加"編輯"代碼
          ??在 DataGrid 標簽中加入
          ??OnUpdateCommand="DataGrid1_Update" OnCancelCommand="DataGrid1_Cancel" OnEditCommand="DataGrid1_Edit"代碼
          ??在codeBehind頁面加入如下代碼
          ??///響應編輯按鈕
          ??public void DataGrid1_Edit(Object sender, DataGridCommandEventArgs e)
          ??{
          ???DataGrid1.EditItemIndex = e.Item.ItemIndex;
          ???if (Request.QueryString.Get("classID") != null)
          ????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ???else
          ????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
          ??}
          ??
          ??///響應取消按鈕
          ??public void DataGrid1_Cancel(Object sender, DataGridCommandEventArgs e)
          ??{
          ???DataGrid1.EditItemIndex = -1;
          ???if (Request.QueryString.Get("classID") != null)
          ????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ???else
          ????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));

          ??}
          ??
          ??///響應更新按鈕??
          ??public void DataGrid1_Update(Object sender, DataGridCommandEventArgs e)
          ??{
          ???TextBox ClassNameText = (TextBox)e.Item.Cells[1].Controls[0];
          ???string className = ClassNameText.Text;
          ???int classID = Int32.Parse((e.Item.Cells[0].Text).ToString());
          ???TextBox orderID2 = (TextBox)e.Item.Cells[5].Controls[0];
          ???int orderID = Int32.Parse(orderID2.Text);
          ???ActorClass.ModifyActorClass(className,classID,orderID);

          ???DataGrid1.EditItemIndex = -1;
          ???if (Request.QueryString.Get("classID") != null)
          ????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ???else
          ????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
          ??}
          ??說明
          ??(1) DataGrid 事件處理程序的格式
          ???MethodName(Object sender, DataGridCommandEventArgs e)
          ??(2) 更新按鈕的說明
          ???A. 獲取編輯狀態中的文本框
          ????TextBox ClassNameText = (TextBox)e.Item.Cells[1].Controls[0];
          ????string className = ClassNameText.Text;
          ???B. 獲取編輯狀態中的下拉列表框
          ????方法一
          ????int classID;
          ????classID = Int32.Parse(Request.Form.Get("sltclassname"));
          ????方法二
          ????DropDownList bbb = (DropDownList)e.Item.Cells[10].FindControl("dpStatus2");
          ????string ddpValue = bbb.SelectedValue
          ???C. 獲取編輯狀態中的復選框
          ????bool boolEnabled = ((CheckBox)e.Item.FindControl("chk_enabled")).Checked;
          ????String str2;
          ????if (boolEnabled)
          ????{
          ?????str2="1";
          ????}
          ????else?
          ????{
          ?????str2="0";
          ????}
          ????賦值給 str2 ,原因是插入到數據庫的布爾型值只能是 1 或者 0
          ???D. 獲取編輯狀態中的文本值,即該列是只讀的.
          ????string storyID = (e.Item.Cells[0].Text).ToString();
          ?
          ?8. 為 DataGrid 控件添加分頁事件
          ??在 DataGrid 控件標簽中加入如下代碼
          ??OnPageIndexChanged="DataGrid1_PageIndexChanged"
          ??在后臺中加入如下代碼
          ??/// <summary>
          ??/// 響應分頁事件
          ??/// </summary>
          ??/// <param name="sender"></param>
          ??/// <param name="e"></param>
          ??public void DataGrid1_Page(Object sender, DataGridPageChangedEventArgs e)
          ??{
          ???DataGrid1.CurrentPageIndex = e.NewPageIndex;
          ???DataBind();
          ??}
          ?
          ?9. 為 DataGrid 控件添加綁定事件,即在 DataGrid綁定時發生的事件處理
          ??一般用些事件來,做一些頁面上的效果.如更改背景色,文本框大小等.
          ??OnItemDataBound="DataGrid1_ItemDataBound"
          ??/// <summary>
          ??/// 響應DataGrid綁定事件
          ??/// </summary>
          ??/// <param name="sender"></param>
          ??/// <param name="e"></param>
          ??public void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
          ??{
          ???if (e.Item.ItemType == ListItemType.Item)
          ???{
          ????e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8dafa'");
          ????e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='white'");

          ???}
          ???else if (e.Item.ItemType == ListItemType.AlternatingItem)
          ???{
          ????e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#c8dafa'");
          ????e.Item.Attributes.Add("onmouseout","this.style.backgroundColor='#f6f6f6'");
          ???}
          ??}
          ??
          ?10. 為 DataGrid 控件添加接鈕處理事件程序
          ??在 DataGrid 控件標簽中加入如下代碼
          ??OnItemCommand="ItemsGrid_Command"
          ??在后臺中加入如下代碼
          ??public void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
          ??{
          ???switch(((LinkButton)e.CommandSource).CommandName)
          ???{

          ????case "Delete":
          ?????int classID = Int32.Parse((e.Item.Cells[0].Text).ToString());
          ?????ActorClass.DeleteActorClass(classID);
          ?????if (Request.QueryString.Get("classID") != null)
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ?????else
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
          ?????break;

          ?????// Add other cases here, if there are multiple ButtonColumns in
          ?????// the DataGrid control.
          ????case "hidden":
          ?????int actorID = Int32.Parse((e.Item.Cells[0].Text).ToString());
          ?????ActorClass.HiddenActorClass(actorID);
          ?????if (Request.QueryString.Get("classID") != null)
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ?????else
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
          ?????break;
          ????case "MoveUp":
          ?????int actorclassID = Int32.Parse((e.Item.Cells[0].Text).ToString());
          ?????string orderID = (e.Item.Cells[5].Text).ToString();
          ?????ActorClass.MoveUp(orderID,actorclassID);
          ?????if (Request.QueryString.Get("classID") != null)
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ?????else
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by depth,orderID desc"));
          ?????break;
          ????case "MoveDown":
          ?????actorclassID = Int32.Parse((e.Item.Cells[0].Text).ToString());
          ?????orderID = (e.Item.Cells[5].Text).ToString();
          ?????ActorClass.MoveDown(orderID,actorclassID);
          ?????if (Request.QueryString.Get("classID") != null)
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where parentID=" + Request.QueryString.Get("classID") + " order by depth,orderID desc"));
          ?????else
          ??????Common.BindData(DataGrid1,Common.GetSource("select * from ActorClass where depth=1 order by orderID"));
          ?????break;
          ????

          ????default:
          ?????// Do nothing.
          ?????break;

          ???}
          ??}

          ?11. 為 DataGrid添加模板列,但是內容根據字段值來顯示"鏈接",還是文本
          ??以下三個都是,根據字段列不同,而顯示內容及顯示控件不同的處理代碼.
          ??<asp:TemplateColumn HeaderText="子菜單">
          ???<ItemTemplate>
          ????<%# ActorClassManage.hasLeaf(DataBinder.Eval(Container.DataItem,"ActorClassID").ToString(),DataBinder.Eval(Container.DataItem,"child").ToString())%>
          ???</ItemTemplate>
          ??</asp:TemplateColumn>
          ??public static string hasLeaf(string id,string child)
          ??{
          ???string lRtn = "";
          ???if (Int32.Parse(child) > 0)
          ????lRtn="<a href='Actorclassmanage.aspx?classID="+id+"'><font color=blue>子菜單(" + child + ")</font></a>";
          ???else
          ????lRtn = "無子菜單";

          ???return lRtn;
          ??}
          ??<asp:TemplateColumn HeaderText="屬性">
          ???<ItemTemplate>
          ????<asp:LinkButton Text='<%# IsHidden(DataBinder.Eval(Container.DataItem,"ActorClassID").ToString(),(bool)DataBinder.Eval(Container.DataItem,"Enabled")) %>' runat="server" CommandName="hidden" ID="Linkbutton1"></asp:LinkButton>
          ???</ItemTemplate>
          ??</asp:TemplateColumn>
          ??public static string IsHidden(string id,bool enabled)
          ??{
          ???string lRtn = "";
          ???if (enabled == true)
          ???{
          ????lRtn = "[顯示]";
          ???}
          ???else
          ???{
          ????lRtn = "隱藏";
          ???}
          ???return lRtn;
          ??}
          ??public static void Sort(string actorclassID, string orderID)
          ??{
          ???string temp = "";
          ???if (Int32.Parse(BgPicManage.GetMaxCode("actorclass","orderID")) == Int32.Parse(orderID))
          ???{
          ????temp += "<ipnut type='submit' value='向下移'>";
          ???}
          ???if (Int32.Parse(orderID) == 0)
          ???{
          ????temp += "<ipnut type='submit' value='向上移'>";
          ???}
          ??}
          ??
          ?12. DataGrid 控件自定義分頁代碼
          ?
          ??將下列代碼放于包含<DataGrid>的form中去,
          ??<p style="FONT-SIZE:9pt" align="center">
          ????????? <asp:label id="lblPageCount" runat="server"></asp:label>
          ????????? <asp:label id="lblCurrentIndex" runat="server"></asp:label>
          ????????? <asp:linkbutton id="btnFirst" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          ?????????? Font-size="8pt" ForeColor="navy" CommandArgument="0"></asp:linkbutton>
          ????????? <asp:linkbutton id="btnPrev" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          ?????????? Font-size="8pt" ForeColor="navy" CommandArgument="prev"></asp:linkbutton>
          ????????? <asp:linkbutton id="btnNext" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          ?????????? Font-size="8pt" ForeColor="navy" CommandArgument="next"></asp:linkbutton>
          ????????? <asp:linkbutton id="btnLast" onclick="PagerButtonClick" runat="server" Font-Name="verdana"
          ?????????? Font-size="8pt" ForeColor="navy" CommandArgument="last"></asp:linkbutton>
          ??????? </p>
          ???????
          ??????? 后臺代碼
          ???????
          ??????? private void Page_Load(object sender, System.EventArgs e)
          ??????? {
          ????????? // 在此處放置用戶代碼以初始化頁面
          ????????? btnFirst.Text = "最首頁";
          ????????? btnPrev.Text = "前一頁";
          ????????? btnNext.Text = "下一頁";
          ????????? btnLast.Text = "最后頁";
          ????????? //綁定數據源
          ????????? if (!Page.IsPostBack)
          ????????? {
          ????????? ?OpenDatabase();
          ????????? ?BindGrid();
          ????????? }
          ??????? }
          ???????
          ??????? //用于顯示"第幾頁,總*頁"
          ??????? private void ShowStats()
          ??{
          ????lblCurrentIndex.Text = "第 " + (MyDataGrid.CurrentPageIndex + 1).ToString() + " 頁";
          ????lblPageCount.Text = "總共 " + MyDataGrid.PageCount.ToString() + " 頁";
          ??}
          ??
          ??//響應分頁按鈕
          ??public void PagerButtonClick(object sender, EventArgs e)
          ??????? {
          ??????? ?string arg = ((LinkButton)sender).CommandArgument.ToString();
          ???????? ?switch(arg)
          ???????? ?{
          ????????? ??case "next":
          ?????????? ???if (MyDataGrid.CurrentPageIndex < (MyDataGrid.PageCount - 1))
          ?????????? ???{
          ???????????? ??MyDataGrid.CurrentPageIndex += 1;
          ??? ??????? ??}
          ??????? ??? ??break;
          ????????? ??case "prev":
          ?????????? ???if (MyDataGrid.CurrentPageIndex > 0)
          ?????????? ???{
          ??????????? ???MyDataGrid.CurrentPageIndex -= 1;
          ?????????? ???}
          ?????????? ???break;
          ????????? ??case "last":
          ?????????? ???MyDataGrid.CurrentPageIndex = (MyDataGrid.PageCount - 1);
          ?????????? ???break;
          ????????? ??default:
          ?????????? ???MyDataGrid.CurrentPageIndex = System.Convert.ToInt32(arg);
          ?????????? ???break;
          ???????? ?}
          ???????? ?BindGrid();
          ???????? ?ShowStats();
          ??????? }

          posted on 2006-10-30 14:25 圣域飛俠 閱讀(299) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 霸州市| 叙永县| 岱山县| 扎鲁特旗| 秦安县| 抚松县| 达州市| 广河县| 岐山县| 连平县| 九江市| 湟源县| 常宁市| 宁波市| 石屏县| 梁山县| 皮山县| 来安县| 尖扎县| 巴彦淖尔市| 通化县| 庐江县| 榆中县| 兴城市| 项城市| 北海市| 元氏县| 尚义县| 怀来县| 句容市| 河南省| 远安县| 武穴市| 铅山县| 铜山县| 上虞市| 乌拉特中旗| 娱乐| 晋宁县| 济阳县| 泊头市|