1. 拉控制項
拉一個SqlDataSource,一個GridView,一個DetailsView
設定好資料庫連線(步驟略)
2.設定SqlDataSource (除錯也來這裡除)
要照以下設定
SELECT依序點出所有欄位
UPDATE依序點出所有欄位,主鍵在SET取消勾勾,在篩選Filter上打問號,其他在New Value上打問號
DELETE依序點出主鍵欄位,在篩選Filter上打問號
(篩選沒弄好會導致全部修改或全部刪除,SET沒取消勾勾會無法修改)
3.設定GridView & DetailsView
確認DataKeyNames的值,是否為當前的主鍵(通常是流水自動編號)
照圖把Edit和Delete鍵叫出來
DetailsView要注意DefaultMode是甚麼模式,和對應的AutoGenerateXXXButton有沒有打開
這裡例子是DefaultMode=Insert新增模式,AutoGenerateInsertButton=True
4. 程式測試看有無錯誤
這時候應該GridView和DetailsView都可以使用了
(這裡沒有做資料驗證,請打入適當型態的資料)
進階,條列式的資料用DropDownList做顯示
1. 拉控制項
除了之前的SqlDataSource1以外,再拉一個SqlDataSource,抓條列資料給DropDownList
2. GridView的特定欄位變更成手動樣版模式
把原本的Textbox換成DropDownList
3. DropDownList設定SqlDataSource
display和value不要搞反
4. DropDownList設定資料綁定
再來設定資料綁定,讓DropDownList能和GridView溝通
選擇原來SqlDataSource1中的類型編號(Forign Key,欲修改的地方)
(DetailsView的欄位也請如法炮製,當然還可以做延伸)
5.程式測試看有無錯誤
6.修正顯示模式,讓新增資料按鈕起作用
按下新增資料,跳出DetailsView,隱藏GridView
新增完資料,跳出GridView,隱藏DetailsView
按鈕雙點叫出Button1.Click事件
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click DetailsView1.Visible = True GridView1.Visible = False End Sub |
DetailsView按下事件鈕(閃電形狀),在ItemInserted這行右半側雙點
叫出DetailsView1.ItemInserted事件
Protected Sub DetailsView1_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles DetailsView1.ItemInserted DetailsView1.Visible = False GridView1.Visible = True End Sub |
SQL中的?是VS2008中特有的參數設定,也可以是@變數名,在SELECT中有?,會另外詢問你如何定義參數
INSERT新增和UPDATE更新的?的意思是,新增和更新模式下的文字框(使用者會輸入)的內容,所以不會詢問
詢問的視窗
做為TextBox1的值
還有其他進階設定供參考
另一個做sqlDataSource做法
此例是把文字框資料帶入SQL裡的LIKE中,比對查詢電影名稱的其中字串
請問
我將
GridView 樣板的 EditItemTemplate 的這一欄[Column] 換成 DropDownList
其顯示正常, 也可以更新!
其該欄在MSSQL 裡Table的資料行 [這一欄] 內容是類似如下
[這一欄]
123
145
abc
666
666
abc
123
我好帥
我好帥
筆數多而且會有重複的值 是不是有辦法 在按下編輯後 看到 [這一欄] 的DropDownList 下拉的值不會重複?
像先從SQL Select distinct 過濾重複的值那般~
請問該怎麼做呢?
還是可同時從別張Table表取值?
謝謝謝謝謝謝謝謝謝感謝!
我貼一下 刻意把資料行都改成 這一欄
在ItemTemplate 的[這一欄]格式沒變 預設GridView的Label
<程式碼>
<asp:TemplateField HeaderText="這一欄" SortExpression="這一欄">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
DataTextField="這一欄" DataValueField="這一欄"
SelectedValue='<%# Bind("這一欄") %>’ DataSourceID="SqlDataSource1">
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("這一欄") %>’></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</程式碼>
版主回覆:(01/23/2012 07:13:21 AM)
你可能需要E-mail完整的語法給我才看得懂
請問一下~我照你的方法寫了1~5的地方~可以使用~可是因為我要寫的方法是多個選項,所以不能直接指定Datasourse,而是使用程式碼(C#)連接gridview和detailsview(連結同一個),但是這樣的話detailsview的顯示就會失敗~會變成只有出現"插入 取消",而沒有可以打內容的東西,請問問題是出在哪裡呢><?