iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 29
0
Modern Web

淺談資料庫&ASP.net&C# 入門系列 第 29

[iT鐵人賽Day29]使用ASP.NET與SQLServer做出留言板(不包含樣式美化XDD) 中篇

那麼就繼續完成嘉義縣公共汽車管理處留言板留言板吧!

上篇看這

下篇看這

首頁顯示資料表的資料

上一篇最後已經完成了新增留言資料到資料庫了,且按下確定留言的下一刻會跳轉到Message_Index.aspx頁面,現在要做的事情,就是將留言的資料表顯示在Message_Index.aspx,而在上篇已經有將GridView1的表格拉出來了並且跟留言資料表做繫結了,所以在Message_Index.aspx.cs的Page_Load要讓資料表資料顯示在上面。

作法如下:

使用DataSet的方式

if (!IsPostBack) //是否第一次載入PageLoad
   {
   string config =
System.Web.Configuration.WebConfigurationManager.ConnectionStrings["message_boardConnectionString"].ConnectionString; //從config找到資料庫位置

SqlConnection connection = new SqlConnection(config); //與資料庫做連結的大門

SqlCommand command =new SqlCommand(@"SELECT [id], [header], [name],[initDate] FROM [message_board]",connection);//對資料庫下令的SQL語法

SqlDataAdapter dataAdapter = new SqlDataAdapter(command);//取得command資料

DataSet dataset = new DataSet();//創立一個dataset的記憶體資料庫

dataAdapter.Fill(dataset);//將上面抓到的資料存入dataset內
                                         

GridView1.DataSource = dataset;//DataSource的資料來源是dataset or datatable

GridView1.DataBind();//資料與欄位合在一起
   }

稍微說明一下

1.DataAdapter: 取得SqlCommand內SQL的資料。

2.DataSet: 創立準備存放資料的記憶體資料集。

3.dataAdapter.Fill: 將取得的資料存入記憶體資料集中。

4.DataBind: 將資料與控制項做繫結。

更多DataSet可參考ASP.NET與資料庫的資料存取-DataSet

執行後,資料就有進去GridVeiw1裡了。

https://ithelp.ithome.com.tw/upload/images/20190930/20119925K60YO5wiRJ.png

創建留言內容的頁面

現在要創立一個新的Web表單,命名:Message_Main.aspx

,是要用來顯示留言的內容的頁面。

並將控制項拉好,如下:

<asp:Button ID="Reply" runat="server" Text="回應文章" />
<br />
<br />
主題:<asp:Label ID="Message_header" runat="server" Text="Label"></asp:Label>
<br />
發表人:<asp:Label ID="Message_Name" runat="server" Text="Label"></asp:Label>
發表時間:<asp:Label ID="Message_Time" runat="server" Text="Label"></asp:Label>
<br />
內容:<asp:Label ID="Main" runat="server" Text="Label"></asp:Label>
<br/>

設定連結到Message_Main.aspx

到Message_Index.aspx對GridView1選編輯樣板,找到主題,會看到之前放好的HyperLink。

將HyperLink編輯,NavigateUrl,自訂程式碼運算式寫上:

"Message_Main.aspx?id="+Eval("id")

就可以點擊連接到Message_Main,且會在網址上抓取點開欄位的id資料(是id不是編號唷!)。

顯示留言的內容在Message_Main

將留言資料庫內的資料顯示在Message_Main上,如下:

使用DateReader讀取資料

if (!IsPostBack)
{
string id = Request.QueryString["id"];

string config = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["message_boardConnectionString"].ConnectionString;  

SqlConnection connection = new SqlConnection(config); //與資料庫做連結的大門

SqlCommand Command =new SqlCommand($"SELECT id, header, name, main, initDate FROM message_board where(id =@id)", connection);//SQL語法,使用參數。

Command.Parameters.Add("@id", SqlDbType.NVarChar); //設定參數資料型態
Command.Parameters["@id"].Value = Request["id"]; //賦予參數值

connection.Open();

SqlDataReader reader = Command.ExecuteReader();
if (reader.Read())
  {
Message_header.Text = reader["header"].ToString();
Message_Name.Text = reader["name"].ToString();
Message_Time.Text = reader["initDate"].ToString();
Main.Text = reader["main"].ToString();
  }

reader.Close();

}

稍微介紹一下

1.Connection : 與資料庫建立起連接的通道。
2.Command: 下達SQL語法指令。
3.ExecuteReader: 通知資料庫執行Command所下達的SQL語法指令,並回傳資料。
4.Read(): 使DataReader開始一行一行的讀取資料列。

DataReader可參考ASP.NET 讀取資料庫的資料常常用到的DataReader

創立回覆留言頁面

創立一個叫Message_Reply.aspx,是用來回應留言的頁面。

並拉一拉控制項跟html:

<h1>回應留言</h1>
        標題<asp:TextBox ID="Reply_Header" runat="server" ></asp:TextBox>
        <p>
            暱稱<asp:TextBox ID="Reply_Name" runat="server" ></asp:TextBox>
        </p>
        內容<asp:TextBox ID="Reply_Main" runat="server" Height="427px" TextMode="MultiLine" Width="928px"></asp:TextBox>
        <br />
        <asp:Button ID="pass" runat="server" Text="確定回應"/>
        <input id="Reset1" type="reset" value="reset" /><asp:Label ID="Message" runat="server" ForeColor="red" Text=""></asp:Label>

然後在Message_Main.aspx點擊回應留言按紐會自動跳到,Message_Main.aspx.cs

Click動作裡面打上:

Response.Redirect("Message_Reply.aspx?id="+Request.QueryString["id"];

Request.QueryString["id"]可以取得網址上的id,以下圖來說也就是10。
https://ithelp.ithome.com.tw/upload/images/20191001/201199255CPDAxgZkz.png

這樣就可以跳轉過去Message_Reply.aspx了。

好吧!今天就先到這裡,明天就會完成整個留言板了。

上篇看這

下篇看這


上一篇
[iT鐵人賽Day28]使用ASP.NET與SQLServer做出留言板(不包含樣式美化XDD) 上篇
下一篇
[iT鐵人賽Day30]使用ASP.NET與SQLServer做出留言板(不包含樣式美化XDD) 下篇
系列文
淺談資料庫&ASP.net&C# 入門36

尚未有邦友留言

立即登入留言