大量label 顯示不同SQL的資料

Curtis
我使用visual studio 2017,想做一個座位表能從SQL server裡面抓出資料,今天誰填這個位置,顯示姓名,

我有用td拉出一個座位表,裡面有放label,想讓label顯示SQL裡面select到的姓名,大概是這樣:


因為要抓出當日的日期與座位,所以SQL的語法也寫好了,大概是這樣:


(先試一個F7M6的Label ID的座位)我後端是這樣寫,但是不知道為甚麼沒有我要select的東西:


想請教我是不是在哪裡出了錯?
以及我如果要這樣,在所有的label座位(83個)都是這樣使用,有沒有其他更好作法?
Curtis
連接字串我先刪掉,因為insert的頁面可以正常使用,連接字串應該沒問題(?)
topcat
想請教我是不是在哪裡出了錯?

你的語法在@name那邊怪怪的

應該是類似以下這樣
[姓名]=@name

topcat
我如果要這樣,在所有的label座位(83個)都是這樣使用,有沒有其他更好作法?


建議您可以把這些label依據對應的位置給id
例如:
Label7FM6
Label7FM1
Label7FL6
...
之類的,請類推
然後您的SQL可以把樓層、區域、座號組合成類似的

SELECT *
    , 'Label' + [樓層] + [區域] + [座號] As Seat
FROM [你的資料表]


之後,就可以透過迴圈
取Seat
然後透過CType(FindControl({取Seat}),Label).Text = {取姓名}

大概這樣的方向
您思考看看
^_^
真的有點難
建議您應該把人放在二微陣列裡面 或 座標 把你的lable 命名 A11 A12 A13 A21 A22 A23 這樣用迴圈搞定比較簡單吧
Curtis
版主您好,不好意思,這是第一次寫網站的部分,可能問題有點多,或是做法比較粗糙,再麻煩指教了

應該是類似以下這樣
[姓名]=@name


那請問我SQL的語法改成這樣
[code]SqlCommand cmd = new SqlCommand(@"select [姓名] from [Table] where DATEDIFF(dd,[日期], GETDATE()) = 0 And[樓層] = '7F' And[區域] = 'M' And[座號] = '6' And [姓名] = @name", con);
[/code]
也無法成功顯示在Label上,還是我還是誤會了甚麼?


之後,就可以透過迴圈
取Seat
然後透過CType(FindControl({取Seat}),Label).Text = {取姓名}


不好意思,我不太懂為甚麼要 As seat,是可以把他們彙整成seat這個欄位名稱的意思嗎?

大概要做一個怎麼樣的迴圈才可以取到seat?

以及CType的部分是不是只能在VB上使用,我目前都在CS上寫,我該如何寫這個地方?

謝謝版主

Curtis
建議您應該把人放在二微陣列裡面 或 座標 把你的lable 命名 A11 A12 A13 A21 A22 A23 這樣用迴圈搞定比較簡單吧

大大您好,
是指說label先放到陣列裡,再透過一個迴圈去跑語法的意思嗎?
我也有想過這個做法,但是我迴圈那部分不太知道該怎麼寫...
想睡覺
請問您有 把 select [姓名] from [Table] where DATEDIFF(dd,[日期], GETDATE()) = 0 And[樓層] = '7F' And[區域] = 'M' And[座號] = '6' And [姓名] = @name
試著response write 出來放在sql上跑嗎?

最有價值解答

Allen
https://vimeo.com/432506308/2201bf8d30
我錄了一段影片,您可以參考
topcat
我有用td拉出一個座位表,裡面有放label,想讓label顯示SQL裡面select到的姓名,大概是這樣:

這是您說的你已經拉好這樣的html表格,對嗎?

您要做的,是從資料庫把相對的座位取出,然後把姓名放入,是這樣的需求,對嗎?
從您的回覆中
小喵猜測您對於SQL不是很熟悉
很多的知識要補

SQL中的欄位別名,可以用AS

先描述一下您要做的
1.把要放的Label,取名跟您的資料有關係
例如,
07樓A區6號的Label,就取名為Label07FA06
12樓C區22號的Lable,就取名為Lable12FC22
依此類推
修改一下您現在的td所拉出的座位表

2.從資料庫取出名單(多筆)
其中包含兩個資訊
座位,姓名
07FA06,chen
12FC22,John
....

3.迴圈取資料
並透過FindControl的方式,逐筆資料將姓名放入


大約是這樣的過程
不過先確定一件事
您的需求是否如同小喵的理解一樣呢?
您要做的,是從資料庫把相對的座位取出,然後把姓名放入,是這樣的需求,對嗎?
Curtis
非常感謝各位老師們,版主們願意回覆我,我不太會表達要做的內容,也真的還有很多知識要學習,
就如同你們說的是這樣的理解與這樣的需求沒有錯,經過你們的描述與教學,也有些方向了,我明日會試試看FindControl的部分,真的很謝謝各位!!
Curtis
不好意思,我目前把label的id都改成lblXXX(ex:lbl7M6)了
也更改了一些部分,只是仍然無法顯示資料,想請教會是哪裡出了問題嗎?

資料庫的部分大概是這樣





ASP.NET的部分是這樣
[code]html"public class Seat
{
public string ID { set; get; }
public string EmployeeName { set; get; }
}

public partial class _7Ftest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
InitForm();
}

}

private void InitForm()
{


List<Seat> seats = GetSeatsFromDB(DateTime.Today.ToString());

foreach (Seat Seat in seats)
{
Label label = FindControl(id: "lbl" + Seat.ID) as Label;
if (label == null)
{
continue;
}

label.Text = Seat.EmployeeName;
}


}


private List<Seat> GetSeatsFromDB(string stdate)
{
List<Seat> seats = new List<Seat>();
string connsql = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Desktop\WebApplication3\App_Data\Database1.mdf;Integrated Security=True";
try
{
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = connsql;
conn.Open();
string queryString = @"SELECT [姓名], concat([樓層],[區域],[座號]) AS ID, [日期] FROM [Table] WHERE [日期] = @stdate";
SqlCommand command = new SqlCommand(queryString, conn);
command.Parameters.AddWithValue("@stdate", stdate);
SqlDataReader reader = command.ExecuteReader();
try
{
while (reader.Read())
{
seats.Add(new Seat() { ID = (string)reader["ID"], EmployeeName = (string)reader["姓名"] });
}
}
finally
{
reader.Close();
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}

return seats;
}

}";[/code]
topcat
如果您是在本機上執行
您可以下中斷點
然後透過F11的方式Step By Step執行
查看哪個步驟與您的預期不一樣

另外,您貼了資料庫的狀況、CodeFile的內容(.cs)
但是沒有貼aspx的內容
是否方便貼出來?

^.^a
Curtis
謝謝版主,我在分段執行之後發現是while那邊值沒抓到," concat([樓層],[區域],[座號]) AS ID "這個部分多抓一堆空白的部分,改好之後就能順利執行了,非常感謝各位!
topcat

另外,
您的問題在於
您的欄位【型態】的問題
您宣告的是nchar(10)
假設您輸入 【A】
實際上資料會是【A】+【空白】*9
nchar, charc會自動補空白
您本來的Label的Id是【lbl7M6】
但是FindControl所要找的卻是【lbl7         M         6         】

所以當然找不到囉


建議您使用varchar(10)
這樣不會補空白

詳細的型態的概念,推薦您參考小喵的這一篇文章
https://dotblogs.com.tw/topcat/2008/03/04/1144

Curtis
對的沒錯! 在別台裝置新建一個DB的時候沒注意到,非常謝謝您!
回到頂部