C50108
Search…
2019/0305/SS查詢式end&ASP.NET_Gridview_自訂樣式分頁

集合 一筆資料或以上使用 in
in 查詢 一定要指定欄位 exists不用指定欄位但需要指定關聯
select * from 課程 where 課程編號 in
(select 課程編號 from 班級 where 學號 in
(select 學號 from 學生 where 姓名='周杰輪'))
子查詢效能較不好最好以 inner join 寫法 先將多表和為一表並關聯最後查詢一次
select 課程.* from 課程
inner join 班級 on 課程.課程編號=班級.課程編號
inner join 學生 on 學生.學號=班級.學號
where 學生.姓名='周杰輪'

select * from 課程 where 課程編號 not in
(select 課程編號 from 班級 where 學號 in
(select 學號 from 學生 where 姓名='周杰輪'))
不用子查詢但同樣結果 做差集 或 EXCEPT前+NOT
select 課程.* from 課程
except
select 課程.* from 課程
inner join 班級 on 課程.課程編號=班級.課程編號
inner join 學生 on 學生.學號=班級.學號
where 學生.姓名='周杰輪
Not 效能較差會盡量避免 < 集合運算 < 直接查詢

sybase infoint
mysql
sqlserver t-sql
oracle pl sql
Select * from tbname

select * from 員工 where 薪水>=all
(select 薪水 from 員工 where 城市='台北')

select * from 員工 where 薪水>=some
(select 薪水 from 員工 where 城市='台北')
select * from 員工 where 薪水>=any
(select 薪水 from 員工 where 城市='台北')

排序後空出x筆後查詢顯示
select 身份證字號,姓名,薪水
from 員工
order by 身份證字號
offset 3 rows

select 身份證字號,姓名,薪水
from 員工
order by 身份證字號
offset 3 rows
fetch next 2 rows only

is null 不是 = null
=' ' 空字串
函數ISNULL(欄位,函式)
ex. ISNULL(電話,'尚未填寫')
select * from 員工 where 電話 is null
select 身份證字號,姓名,ISNULL(電話,'尚未填寫'),薪水 from 員工
生日時間型態資料餵尚未填寫字串
資料轉換

select 學號,姓名, isnull(cast(生日 as varchar),'尚未填寫') from 學生
select cast(生日 as varchar) from 學生
select cast(100 as varchar)

CONVERT ( 資料型態 , 值 , 格式代號 )
select convert(varchar,生日,20) from 學生
select 學號,姓名, isnull(convert(varchar,生日,20),'尚未填寫') from 學生

ex.此人同時是員工也是教授
bl遞迴方式查詢
通常會合併表
暫存表 with
with 有名字的教授表
as
(select 教授.*, 員工.姓名
from 員工 inner join 教授
on 員工.身份證字號=教授.身份證字號)
select *
from 班級
inner join 學生 on 班級.學號=學生.學號
inner join 課程 on 課程.課程編號=班級.課程編號
inner join 有名字的教授表 on 有名字的教授表.教授編號=班級.教授編號
--------
遞迴錨點
類似自身合併查詢
AS內為CTE內容
with 主管2
as
(
select 員工字號,姓名, 1 as 階層 from 主管 where 主管字號 is null
union all
select 主管.員工字號,主管.姓名, 階層+1 from 主管 inner join 主管2 on 主管.主管字號=主管2.員工字號
)
select * from 主管2
order by 階層
執行結束條件為 主管字號 = 員工字號 此人為主管
遞迴
從前有座山.山裡有座廟.廟裡有老和尚和小和尚.有天小和尚對老和尚說:師父師父說個故事給我聽吧.老和尚說:好.從前有座山.山裡有座廟.廟裡有老和尚和小和尚.有天小和尚對老和尚說:師父師父說個故事給我聽吧.老和尚說:好.從前有座山.山裡有座廟.廟裡有老和尚和小和尚.有天小和尚對老和尚說:師父師父說個故事給我聽吧.老和尚說:好.從前有座山.山裡有座廟.廟裡有老和尚和小和尚.有天小和尚對老和尚說:師父師父說個故事給我聽吧.老和尚說:好.從前有座山.山裡有座廟.廟裡有老和尚和小和尚.有天小和尚對老和尚說:師父師父說個故事給我聽吧.老和尚說:好.從前有座山.山裡有座廟.廟裡有老和尚和小和尚.有天小和尚對老和尚說:師父師父說個故事給我聽吧.老和尚說:好. .........(持續下去)
遞迴很困難 通常寫成迴圈後再改成遞迴

GridView 物件 底下的
Gridrow 物件 為GridView 的每一行
pagerrow 物件 為GridView 的最底下控制行
pagertemplate 物件 建立此物件會取代 pagerrow
Button 按鈕控制項
LinkButton 外觀像超連結的按鈕控制項
ImageButton 外觀是圖片的按鈕控制項
asp控制項後端的css的class屬性為CssClass
值為純文字的後端框 可用label控制項 屬性text則可藉由後端操控

https://ithelp.ithome.com.tw/questions/10178717
ithelp.ithome.com.tw
PageIndex 現在狀態的頁數
上一頁 下一頁 合併為 切換分頁
物件觸發事件時會傳兩種東西到後端 1. 名稱 2.事件

<asp:LinkButton ID="lkbPrev" runat="server" CssClass="btn"
OnClick="PageChange_Click">3</asp:LinkButton>
<asp:LinkButton ID="lkbNext" runat="server" CssClass="btn"
OnClick="PageChange_Click">4</asp:LinkButton>
//protected void lkbNext_Click(object sender, EventArgs e)
//{
// GridView1.PageIndex++;
//}
//protected void lkbPrev_Click(object sender, EventArgs e)
//{
// if(GridView1.PageIndex>0)
// GridView1.PageIndex--;
//}
上面的寫法內聚力較高
protected void PageChange_Click(object sender, EventArgs e)
{
if (((LinkButton)sender).ID == "lkbPrev")
{
if (GridView1.PageIndex > 0)
GridView1.PageIndex--;
}
else
{
GridView1.PageIndex++;
}
}
你有用 FindControl 時找不到 Control (控制項) 的經驗嗎 | The Will Will Web
後端抓前端id 如果控制項擺在別人的控制項內則會抓不到id
必須在後端下指令找到它
protected void GridView1_DataBound(object sender, EventArgs e)
{
string page = "Page " + (GridView1.PageIndex + 1) + " of " + GridView1.PageCount;
((Label)GridView1.BottomPagerRow.Cells[0].FindControl("lblInfo")).Text = page;
}

<asp:GridView ID="GridView1"
runat="server" DataSourceID="SqlDataSource1"
PageSize="1" AllowPaging="true"
OnDataBound="GridView1_DataBound"
>
<PagerTemplate>
<table style="width:100%">
<tr>
<td>
<asp:LinkButton ID="lkbPrev" runat="server" CssClass="btn" OnClick="PageChange_Click">3</asp:LinkButton>
<asp:LinkButton ID="lkbNext" runat="server" CssClass="btn" OnClick="PageChange_Click">4</asp:LinkButton>
<asp:DropDownList ID="ddlPager" runat="server">
</asp:DropDownList>
</td>
<td style="text-align:right">
<asp:Label ID="lblInfo" runat="server"></asp:Label>
</td>
</tr>
</table>
</PagerTemplate>
</asp:GridView>

頁數 = 1~ gridview.pagecount
每跑一次跑出一個item
protected void GridView1_DataBound(object sender, EventArgs e)
{
string page = "Page " + (GridView1.PageIndex + 1) + " of " + GridView1.PageCount;
((Label)GridView1.BottomPagerRow.Cells[0].FindControl("lblInfo")).Text = page;
for (int i = 1; i <= GridView1.PageCount; i++)
{
ListItem item = new ListItem();
item.Text = i.ToString();
if(GridView1.PageIndex==i-1)
item.Selected = true;
((DropDownList)GridView1.BottomPagerRow.Cells[0].FindControl("ddlPager")).Items.Add(item);
}
}
((DropDownList)GridView1.BottomPagerRow.Cells[0].FindControl("ddlPager")) = DropDownList物件

TextBox tb = new TextBox ( ) ;
建構子
protected void Page_Load(object sender, EventArgs e)
{
//TextBox tb = new TextBox();
//tb.Text = "abcd";
//form1.Controls.Add(tb);
}

protected void GridView1_DataBound(object sender, EventArgs e)
{
TableCell tc = GridView1.BottomPagerRow.Cells[0];
string page = "Page " + (GridView1.PageIndex + 1) + " of " + GridView1.PageCount;
Label lblInfo = (Label)tc.FindControl("lblInfo");
lblInfo.Text = page;
DropDownList ddlPager = (DropDownList)tc.FindControl("ddlPager");
ListItem item;
for (int i = 1; i <= GridView1.PageCount; i++)
{
item = new ListItem();
item.Text = i.ToString();
if(GridView1.PageIndex==i-1)
item.Selected = true;
ddlPager.Items.Add(item);
}
}

protected void GridView1_DataBound(object sender, EventArgs e)
{
DropDownList ddlPager = (DropDownList)tc.FindControl("ddlPager");
ListItem item;
for (int i = 1; i <= GridView1.PageCount; i++)
{
item = new ListItem(i.ToString());
//item.Text = i.ToString();
if(GridView1.PageIndex==i-1)
item.Selected = true;
ddlPager.Items.Add(item);
}
}
AUTOPOSTBACK = TURE 才會自動F5
ONTEXTCHANGE = 專注點離開時發生
OVERLODING 多載
TEXT 介面上顯示
VALUE 資料庫給KEY
Copy link
On this page
效能&反向運算
反向子查詢 在in前+not即可
ANSI - SQL 用在任何資料庫都可以的
all 全部都滿足
some 或 any (t-sql) 只要其中滿足
order by 子句 offset x rows
fetch next 只顯示
null與資料轉換
CAST (值 AS 資料型態)
CONVERT 萬用轉型
CTE查詢
ASP.NET web froms GridView 較複雜自訂樣式分頁
protected void 功能名稱 ( 資料型態 物件名稱 ,EventArgs e )
下拉式選單
TextBox 鑄造控制項
優化 鑄造跟找尋ID不用用迴圈重複
利用下拉式選單直接切換頁面 ( 事件一定發生在DROPDOWNLIST上面 )