標籤

C# (4) asp.new (3) R (2) Delphi (1) Dos (1) english (1) music (1)

2012年9月17日 星期一

Asp.net和C#取值:(GridView...)在CS中取ASPX中的值、在ASPX中取CS中的值。

取值:(GridView...)在CS中取ASPX中的值、在ASPX中取CS中的值。
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#)急……


2012年9月3日 星期一

Beginning
first day:
1.VS2005 和 SQL sever2008 R2的相容性(SQL Server 2008 支援VS 2005 link)
2.示範網站:台灣國際紀錄片
3.安裝SQL時,驗証選SQL混合那一項(非WINDOWS驗証)

參考用書:
[ASP.NET入門實戰班]上課流程大公開、與書本(上集 / ASP.NET專題實務)(不建議初學者使用,書中許多地方的CODE有錯誤)

以下為勘誤(如果看不懂,請參照別本書)

P10-16: <asp:GridView ID="GridView1" runat="server" DataKeyNames="id">要加 OnRowEditing="GridView1_RowEditing"
P10-18:SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString);中的("testConnectionString")改為["testConnectionString"]
P10-21:什麼叫做SqlConnection Conn = new SqlConnection("資料庫連線字串,ConnectonString");

ETC...

the second day
SqlConnection用法(範例)
GridView 抓控制項的值 part2(RowDataBoundEVEN)
GridViewk在RowDataBound時,取資料庫的值可用DataKeyNames(value from cell of database data原理)




the third day
新手入門資源文章
Page.IsPostBack(判別這個Web Form是不是第一次開啟)