.net之 datagrid
(自己參加的這個項目中)數據綁定控件除了上節的repeater,另一個常用的就是datagrid了.預實現效果:
?
?一:用到的幾個屬性,概述.
(1)AutoGenerateColumns(是否自動生成列):默認情況下,屬性被設置為 true,為數據源中的每一個字段創建一個列(BoundColumn)對象.列顯示順序與每一字段在數據源中出現的順序一樣。 通常情況下,將其設為false,而只選擇你要顯示的列,將其包含在<columns></columns>標記之間列,顯示順序與添加順序一致。
(2)AlternatingItemStyle(交替項樣式) :指定 控件中交替項的樣式,為了美觀,常把相鄰兩行定義為不同的樣式.
(3)ItemStyle(項樣式):指定控件中項的樣式。
(4)HeaderStyle(頭樣式): 指定控件中頁眉部分的樣式。
(5)PagerStyle:指定控件中頁選擇部分的樣式,可用于對所綁定數據分頁,
(6)Columns:列集合,當自動生成列設為false時,添加自定義列.
(7)BoundColumn:顯示綁定到數據源中的字段的列。它以文本形式顯示字段中的每個項。這是 DataGrid 控件的默認列類型。
(8)TemplateColumn:按照指定的模板顯示列中的各項。這使您可以在列中提供自定義控件。
(9)DataField:指定所綁定數據源對應的列名稱
(10)HeaderText:指定頭部顯示名稱
(11)Wrap:是否換行
(12)HorizontalAlign:水平停靠位置
二:datagrid用到的事件概述:
(1)先調用ItemCreated創建每一項,然后調用ItemDataBound綁定每一項數據,當點擊一行時會調用Itemcommand事件.
所以若要對每一行中的空間添加屬性,則應在ItemCreated中,若與所綁定的數據有關則在ItemDataBound中,為每一行的某些項添加CommandName則可以再ItemCommand中獲取對應事件.
代碼如下:
.aspx中代碼:
代碼????????????????<asp:datagrid?id="DGItem"?runat="server"?Width="100%"?PageSize="40"?AutoGenerateColumns="False"????????????????????????????CssClass="DataGrid"?AllowPaging="True">
????????????????????????????<AlternatingItemStyle?CssClass="DataGridAlter"></AlternatingItemStyle>
????????????????????????????<ItemStyle?CssClass="DataGridItem"></ItemStyle>
????????????????????????????<HeaderStyle?Wrap="False"?CssClass="DataGridHeader"></HeaderStyle>
????????????????????????????<PagerStyle?Visible="False"></PagerStyle>
????????????????????????????<Columns>
????????????????????????????????<asp:BoundColumn?Visible="False"?DataField="newsId"?HeaderText="newsId">
????????????????????????????????????<HeaderStyle?Wrap="False"></HeaderStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:TemplateColumn?HeaderText="選擇">
????????????????????????????????????<HeaderStyle?Wrap="False"?HorizontalAlign="Center"?Width="50px"?VerticalAlign="Middle"></HeaderStyle>
????????????????????????????????????<ItemStyle?HorizontalAlign="Center"?VerticalAlign="Middle"></ItemStyle>
????????????????????????????????????<HeaderTemplate>
????????????????????????????????????????<asp:checkbox?id="chkAll"?runat="server"?Text="刪除"></asp:checkbox>
????????????????????????????????????</HeaderTemplate>
????????????????????????????????????<ItemTemplate>
????????????????????????????????????????<asp:checkbox?id="chkSingle"?runat="server"></asp:checkbox>
????????????????????????????????????</ItemTemplate>
????????????????????????????????</asp:TemplateColumn>
????????????????????????????????<asp:BoundColumn?DataField="newsTitle"?HeaderText="名稱">
????????????????????????????????????<HeaderStyle?Wrap="False"></HeaderStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:BoundColumn?DataField="keywords"?HeaderText="關鍵字">
????????????????????????????????????<HeaderStyle?Wrap="False"></HeaderStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:TemplateColumn?HeaderText="來源">
????????????????????????????????????<ItemTemplate>
????????????????????????????????????????<asp:Label?id="Label1"?runat="server"?Text="dd"></asp:Label>
????????????????????????????????????</ItemTemplate>
????????????????????????????????</asp:TemplateColumn>
????????????????????????????????<asp:BoundColumn?DataField="inDate"?HeaderText="添加日期"?DataFormatString="{0:yyyy-MM-dd}">
????????????????????????????????????<HeaderStyle?Wrap="False"?Width="70px"></HeaderStyle>
????????????????????????????????????<ItemStyle?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:BoundColumn?DataField="editDate"?HeaderText="修改日期"?DataFormatString="{0:yyyy-MM-dd}">
????????????????????????????????????<HeaderStyle?Wrap="False"?Width="70px"></HeaderStyle>
????????????????????????????????????<ItemStyle?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:BoundColumn?DataField="hits"?HeaderText="點擊率">
????????????????????????????????????<HeaderStyle?Wrap="False"?Width="40px"></HeaderStyle>
????????????????????????????????????<ItemStyle?Wrap="False"?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:BoundColumn?DataField="orderNo"?HeaderText="序號">
????????????????????????????????????<HeaderStyle?Wrap="False"?Width="40px"></HeaderStyle>
????????????????????????????????????<ItemStyle?Wrap="False"?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????</asp:BoundColumn>
????????????????????????????????<asp:TemplateColumn?HeaderText="審核">
????????????????????????????????????<HeaderStyle?Wrap="False"?Width="55px"></HeaderStyle>
????????????????????????????????????<ItemStyle?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????????<ItemTemplate>
????????????????????????????????????????<asp:CheckBox?id=cbIsPass?runat="server"?Text="通過"?OnCheckedChanged="CheckBox_CheckedChanged"?AutoPostBack="True"?Checked='<%#?DataBinder.Eval(Container,?"DataItem.isPass")?%>'?>
????????????????????????????????????????</asp:CheckBox>
????????????????????????????????????</ItemTemplate>
????????????????????????????????</asp:TemplateColumn>
????????????????????????????????<asp:TemplateColumn?HeaderText="設置">
????????????????????????????????????<HeaderStyle?Wrap="False"?Width="120px"></HeaderStyle>
????????????????????????????????????<ItemStyle?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????????<ItemTemplate>
????????????????????????????????????????<cc1:userlinkbutton?id="btnCommand"?runat="server"?ToolTip="推薦本新聞"?CommandName="command">[我要推薦]</cc1:userlinkbutton>
????????????????????????????????????????<cc1:userlinkbutton?id="btnRemark"?runat="server"?ToolTip="管理評論"?CommandName="remark">[評論]</cc1:userlinkbutton>
????????????????????????????????????????<cc1:userimagebutton?id="imgButtonEdit"?runat="server"?ToolTip="修改"?CommandName="Edit"?ImageAlign="AbsMiddle"
????????????????????????????????????????????ImageUrl="../Images/edit.gif"></cc1:userimagebutton>
????????????????????????????????????</ItemTemplate>
????????????????????????????????</asp:TemplateColumn>
????????????????????????????????<asp:BoundColumn?Visible="False"?DataField="isPic"?HeaderText="isPic"></asp:BoundColumn>
????????????????????????????????<asp:BoundColumn?Visible="False"?DataField="picUrl"?HeaderText="picUrl"></asp:BoundColumn>
????????????????????????????????<asp:BoundColumn?Visible="False"?DataField="isCommand"?HeaderText="isCommand"></asp:BoundColumn>
????????????????????????????</Columns>
????????????????????????</asp:datagrid>
aspx.cs中代碼:
在ItemCreated中為每一行的checkbox添加點擊事件(調用js)
代碼????????///?<summary>????????///?創建datagrid時,,為checkbox添加js事件
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????private?void?DGItem_ItemCreated(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
????????{
????????????if(e.Item.ItemType?==?ListItemType.Header)
????????????{
????????????????((CheckBox)e.Item.Cells[1].FindControl("chkAll")).Attributes.Add("onclick","CheckAll('"?+?this.DGItem.ClientID.ToString()?+?"','chkAll','chkSingle');");
????????????}????
????????????if(e.Item.ItemType?==?ListItemType.AlternatingItem?||?e.Item.ItemType?==?ListItemType.Item)
????????????{
????????????????((CheckBox)e.Item.Cells[1].FindControl("chkSingle")).Attributes.Add("onclick","CheckSingle('"?+?this.DGItem.ClientID.ToString()?+?"','chkAll','chkSingle');");
????????????}
????????????
????????}
在ItemDataBound中為需要根據數據源顯示的項進行判斷(如若對應新聞項目已推薦,則顯示取消推薦,否則顯示我要推薦)
????????///?綁定數據時調用事件,設置是否推薦
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????private?void?DGItem_ItemDataBound(object?sender,?System.Web.UI.WebControls.DataGridItemEventArgs?e)
????????{
????????????if(e.Item.ItemType?==?ListItemType.AlternatingItem?||?e.Item.ItemType?==?ListItemType.Item)
????????????{
????????????????bool?command?=?System.Boolean.Parse(e.Item.Cells[13].Text.ToString());
????????????????if(command)
????????????????{
????????????????????((LinkButton)?e.Item.FindControl("btnCommand")).Text="[取消推薦]";
????????????????}
????????????????else
????????????????{
????????????????????((LinkButton)?e.Item.FindControl("btnCommand")).Text="[我要推薦]"?;
????????????????}
????????????}
????????}
根據aspx中設置的CommanName在ItemCommand事件中判斷下一步的操作(推薦,評論還是修改?)
????????///?檢測(評論,推薦,編輯事件?)
????????///?</summary>
????????///?<param?name="source"></param>
????????///?<param?name="e"></param>
????????private?void?DGItem_ItemCommand(object?source,?System.Web.UI.WebControls.DataGridCommandEventArgs?e)
????????{
????????????e.Item.Cells[0].Text.ToString();
????????????//this.Response.Write(e.CommandArgument+"?name:?"+e.CommandName+?e.Item.Cells[0].Text.ToString());????
????????????string?command?=""+?e.CommandName;
????????????string?strId?=?""+?e.Item.Cells[0].Text.ToString();
????????????int?newsId?=System.Int32.Parse(strId);
????????????tNewsFac?=?new?DevSec.DH.Ums.DH.Fac.DCtNews();
????????????if(command.Equals("command"))
????????????{
????????????????string?str?=((LinkButton)?e.Item.FindControl("btnCommand")).Text.ToString()?;
????????????????if(str.Equals("[我要推薦]"))
????????????????{
????????????????
????????????????????//如果設為推薦
????????????????????tNewsFac.SetCommand(newsId,1);
????????????????????((LinkButton)?e.Item.FindControl("btnCommand")).Text="[取消推薦]"?;
????????????????}
????????????????else
????????????????{
????????????????????//取消推薦
????????????????????tNewsFac.SetCommand(newsId,0);
????????????????????((LinkButton)?e.Item.FindControl("btnCommand")).Text="[我要推薦]"?;
????????????????}
????????????}
????????????else?if(command.Equals("remark"))
????????????{
????????????????this.Response.Redirect("remark.aspx?newsId="+newsId);
????????????}
????????????else?if(command.Equals("Edit"))
????????????{
????????????????this.Response.Redirect("schoolAddEdit.aspx?action=edit&newsId="+newsId);
????????????}
????????}
也可以為datagrid上的checkbox綁定后臺事件(如對于通過列)
aspx中為:
代碼????????????????????????????????<asp:TemplateColumn?HeaderText="審核">????????????????????????????????????<HeaderStyle?Wrap="False"?Width="55px"></HeaderStyle>
????????????????????????????????????<ItemStyle?HorizontalAlign="Center"></ItemStyle>
????????????????????????????????????<ItemTemplate>
????????????????????????????????????????<asp:CheckBox?id=cbIsPass?runat="server"?Text="通過"?OnCheckedChanged="CheckBox_CheckedChanged"?AutoPostBack="True"?Checked='<%#?DataBinder.Eval(Container,?"DataItem.isPass")?%>'?>
????????????????????????????????????????</asp:CheckBox>
????????????????????????????????????</ItemTemplate>
????????????????????????????????</asp:TemplateColumn>
.aspx.cs
????????///?設置是否通過
????????///?</summary>
????????///?<param?name="sender"></param>
????????///?<param?name="e"></param>
????????public?void?CheckBox_CheckedChanged(object?sender,?System.EventArgs?e)
????????{
????????????for(int?index=0;index<this.DGItem.Items.Count;index++)
????????????{
????????????????CheckBox?MyCheckBox???=???(CheckBox)DGItem.Items[index].FindControl("cbIsPass");???
????????????????if(sender.Equals(MyCheckBox))
????????????????{
????????????????????int????newsId?=?System.Int32.Parse(DGItem.Items[index].Cells[0].Text.ToString());
????????????????????tNewsFac?=?new?DevSec.DH.Ums.DH.Fac.DCtNews();
????????????????????tNewsFac.SetPass(newsId);
????????????????}
????????????}
????????????//綁定數據
????????????this.bindData(where);
????????}
當然還需要定義該控件,且在頁面初次調用時綁定數據源(略)
? protected System.Web.UI.WebControls.DataGrid DGItem;?
??? this.DGItem.DataSource = dt;
??? this.DGItem.DataBind();?? ????
?其中js代碼(實現全選以及單選):
????參數說明:
????prefix:前綴;chkAll:全選框;chkSingle:單選框ID
????
????使用方法:
????if(e.Item.ItemType?==?ListItemType.Header)
????{
????????((CheckBox)e.Item.Cells[1].FindControl("chkAll")).Attributes.Add("onclick","CheckAll('"?+?this.dg.ClientID.ToString()?+?"','chkAll','chkSingle');");
????}
*/
function?CheckAll(prefix,chkAll,chkSingle)
{
????var?indexChkAll;
????if(prefix.length?!=?0)
????{
????????indexChkAll????????=?prefix?+?"__ctl2_"?+?chkAll;
????}
????else
????{
????????indexChkAll????????=?chkAll;
????}
????var?objChkAll?=?document.getElementById(indexChkAll);
????var?tempObj;
????for(var?i=0;i<document.forms[0].elements.length;i++)
????{????
????????tempObj?=?document.forms[0].elements[i];
????????if(tempObj.type?==?"checkbox"?&&?tempObj.id?!=?indexChkAll?&&?tempObj.id.indexOf(chkSingle)?!=?-1)
????????{
????????????tempObj.checked?=?objChkAll.checked;
????????}
????}
}
/*?分頁
????參數說明:
????prefix:前綴;chkAll:全選框;chkSingle:單選框ID
????
????使用方法:
????if(e.Item.ItemType?==?ListItemType.AlternatingItem?||?e.Item.ItemType?==?ListItemType.Item)
????{
????????((CheckBox)e.Item.Cells[1].FindControl("chkSingle")).Attributes.Add("onclick","CheckSingle('"?+?this.dg.ClientID.ToString()?+?"','chkAll','chkSingle');");
????}
*/
function?CheckSingle(prefix,chkAll,chkSingle)
{
????var?indexChkAll;
????if(prefix.length?!=?0)
????{
????????indexChkAll????????=?prefix?+?"__ctl2_"?+?chkAll;
????}
????else
????{
????????indexChkAll????????=?chkAll;
????}
????var?objChkAll?=?document.getElementById(indexChkAll);
????var?tempObj;
????var?allCount????=?0;
????var?checkCount????=?0;
????for(var?i=0;i<document.forms[0].elements.length;i++)
????{????
????????tempObj?=?document.forms[0].elements[i];
????????if(tempObj.type?==?"checkbox"?&&?tempObj.id?!=?indexChkAll?&&?tempObj.id.indexOf(chkSingle)?!=?-1)
????????{
????????????if(tempObj.checked)
????????????{
????????????????checkCount++;
????????????}
????????????else
????????????{
????????????????objChkAll.checked?=?false;
????????????????//break;
????????????}
????????????allCount++;
????????}
????}
????if(checkCount?!=?allCount)
????{
????????objChkAll.checked?=?false;
????}
????else
????{
????????if(allCount?!=?0)
????????{
????????????objChkAll.checked?=?true;
????????}
????}
}
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/9421/archive/2009/12/22/1629626.html
總結
以上是生活随笔為你收集整理的.net之 datagrid的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7无法登录到账户登录失败怎么办啊
- 下一篇: Copy GAC DLL