Of course, you can use with the simple textbox,label, etc. .
however, we are discussing how to get the value from GridView,dataList,repeater control here.
we hope to get or find the value from database by the different controls, like GridView controls...
1.取值:Request的用法
在以前asp的年代時,request用在傳遞參數時很好用。但在現在asp.net年代下,皆以CommandName and CommandArgument取代request. 除非有CommandName and CommandArgument做不到時,才用request。以下列出request用法的參考網頁:
ASP.NET 如何取得 Request URL 的各個部分
ASP.NET內抓取網址的方式一覽表(Request)
用asp.net去取得client side的javascript var 值
2.取值(Eval用法):
初學 | 進階 | 實 務 |
123 | Subject | .aspx(放 form/div/之中) | .cs |
+ | 用 | aspx中取值 | Eval的用法 在TemplateField/ItemTemplate/ Lable中 |
<asp:HyperLink ID="lnk2" runat="server" NavigateUrl='<%# "NewDetail.aspx?Seq="+ Eval("Seq") %>'/> | bind 有"Seq"的資料表 EX: |
|
用 | aspx中取值 | Eval的用法 在TemplateField/ItemTemplate/ |
<a href="History.aspx?Seq=<%# Eval("Seq") %>" > <%# Eval("Subject") %> </a> | bind 有"Seq"的資料表 | ||
aspx中取值 | aspx中取值方法(函數) aspx中用GetVar():取得cs中的值 |
在ASPX中呼叫: <%# DloadList().ToString() %> |
.CS中寫Public fun.: public string DloadList() { return "ABC"; } |
|||
+ | 用 | aspx中取值(隱藏法) | 在aspx中,利用hidden value,取得由.cs中產生的數值。 | 1.<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="javascript:Window('123'+ parent.document.form1.Hidden1.value ,300,350);"> Open</asp:HyperLink> 2.<%= hidPath.Value %> 3.在GridView/Columns/TemplateField/ItemTemplate中的 <asp:HyperLink ID="FName" runat="server" Text='<%# Eval("Name") %>' NavigateUrl='<%# "~/"+Hidden2.Value+"/" + Eval("Name") %>' Target="_blank"/> <input id="Hidden1" type="hidden" runat="server" /> |
Hidden1.Value = Request.QueryString["Seq"]; | |
aspx中取值 | 以Repeater為例。在aspx中,將lblDLlist文字標籤給予特別的字。 | <ItemTemplate> <asp:Literal ID="lblDLlist" runat="server"></asp:Literal> </ItemTemplate> |
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Literal a1 = (Literal)e.Item.FindControl("lblDLlist"); // 這邊根據你的需求,把TextBox.Text丟進DB查詢 a1.Text = "1dfgdf23"; } } |
|||
cs中取值 | DataList 取得每列相對應的資料(SQL中的)。 在.cs中的DataList之ItemDataBound做設定。 |
在DataList1_ItemDataBound中{ DataRowView drv = e.Item.DataItem as DataRowView; string seq_id = drv.Row[0].ToString();//取得此列的第一個值Row[0] } |
||||
+ | 不用(可用CommandName和CommandArgument取代) | cs中取值 | 取1值 取得每列相對應的資料(SQL中的)。 在.aspx中,利用DataKeyNames關鍵字取得每列相對應的資料(Seq in DB)。 Outcomes&Applies 在GridView時,每列加上對應的回傳值。 |
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Seq"> | protected void GridView1_RowDataBound{ if (e.Row.RowType == DataControlRowType.DataRow) { Response.Writ(GridView1.DataKeys[e.Row.RowIndex].Value.ToString()); } } |
|
+ | 不用(可用CommandName和CommandArgument取代) | cs中取值 | GridView 取2值 取得每列相對應的資料(SQL中的)。 在.aspx中,利用DataKeyNames關鍵字取得每列相對應的資料(Aseq, Seq in DB)。 |
<asp:GridView ID="GridView1" runat="server" DataKeyNames="Aseq,Seq"> | protected void GridView1_RowCommand() { if (e.CommandName == "myDelete") { String Aseq = e.CommandArgument.ToString().Split(',')[0].Trim(); String Seq = e.CommandArgument.ToString().Split(',')[1].Trim(); } } |
|
用 | cs中取值(隱藏法) | 在cs中,利用Label(hidden),取得由在Gridview中產生的數值。 | <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"...>
<Columns> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ID="lnkViewData" CommandName="myViewData" CommandArgument='<%# Eval("Seq") %>' Text='<%# Eval("Subject") %>' runat="server"></asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:Label ID="lblseq" runat="server" Text="Label" Visible="False"></asp:Label> |
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{ if (e.CommandName == "myViewData") { lblseq.Text = e.CommandArgument.ToString(); editData(e.CommandArgument.ToString()); } } private void editData(string id) //EX1...看你在CS中怎麼用了... { string FilePath = Server.MapPath("~/") + lblseq.Text + "/"; //appendix: files } |
||
+ | 常用 | cs中取值 | GridView 取2值 用CommandName、CommandArgument |
在GridView/Column/asp:TemplateField/itemtemplate/: <asp:Button runat="server" Text="刪除" CommandName="myDelete" CommandArgument='<%# Eval("ASeq") +","+ Eval("Seq") %>' /> |
protected GridView1_RowCommand()
{ if (e.CommandName == "myDelete") { String Aseq = e.CommandArgument.ToString().Split(',')[0].Trim(); String Seq = e.CommandArgument.ToString().Split(',')[1].Trim(); Response.Writ( "Delete from CarrerItem where ASeq =" + Aseq); } } |
|
用 | cs中取值 | GridView 取此列的很多值,並執行。 (如編輯、列印。右例為"Aseq"和"APPLY") |
protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataRow row1 = ((DataRowView)e.Row.DataItem).Row; LinkButton lnkPrint = (LinkButton)e.Row.FindControl("lnkPrint"); lnkPrint.OnClientClick = "Print(" + row1["Aseq"].ToString() + ","+row1["APPLY"].ToString()+");return false;"; } } |
...<head> <script language="javascript" type="text/javascript"> function Print(Aseq,APPLY){ window.open("PrintPage.aspx?Aseq="+Aseq+"&APPLY="+APPLY,'','width=690,height=900,menubars=no,toolbars=no,scrollbars=yes,resizable=yes'); } </script> </head> ... <asp:GridView ID="GridView3" runat="server" OnRowDataBound="GridView3_RowDataBound"....> <Columns> <asp:TemplateField HeaderText="列印"> <ItemTemplate> <asp:LinkButton ID="lnkPrint" runat="server">列印預覽</asp:LinkButton> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> |
備注:
1.BIND時,Eval中的英文是用 雙引號 Eval("ABC ")
2.GridView RowCommand, RowDataBound使用
3.asp.net中Bind和Eval的有什麼區別
參考:
ASP.NET跨頁面傳值方法
在 Repeater 中,怎么根据不同的取值
C# Eval在asp.net中的用法及作用
asp.net中Bind和Eval的有什麼區別
ASP.NET Repeater, C# Repeater
如何抓取Repeater中的控制項的值
repeater为何在后台取不到值?解决思路
datalist的手写代码更新记录的怪问题? - .NET技术 / ASP.NET
asp.net如何用repeater读取数据库内容做链接(C#)急……