如何設定GridView編輯時使用DropDownList,且可指定預設值

設定編輯時使用DropDownList


1. 先將你的欄位,設定成TemplateField
2. 再到GridView物件中,使用「編輯樣版」的功能
3. 選擇EditItem Template,並拉入一個DropDownList控制項
4. 開始設定DropDownList的資料來源,設定方式就跟一般的DropDownList設定一樣
5. 設定如下的預設值
6. 完成

指定預設值

只要在 中加否 SelectedValue=""的屬性就好了。

雖然這個屬性一開始在輸入時,它不會自動帶出intellicense的資訊,原本以為是不可行的。沒想到,直接手動輸入後,還是一樣有效。

範例:


<asp:TemplateField HeaderText="組別" SortExpression="TeamID">
                <EditItemTemplate>                
                    <asp:TextBox ID="textEditTeam" runat="server" Text='<%# Bind("TeamID") %>'></asp:TextBox>                
                    <asp:DropDownList ID="dlEditTeam" runat="server" DataSourceID="sqlTeam" 
                        DataTextField="TeamName" DataValueField="TeamID" SelectedValue='<%# Bind("TeamID") %>'>
                    </asp:DropDownList>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="lblEditTeam" runat="server" Text='<%# Bind("TeamID") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

編輯完畢時取得DropDownList的值

原本是想說在SQLDataSource中設定直接取用TemplateField中的控制項來作為更新資料庫的SQL指令中的變數值來源。可惜,這種方式是不行的。好像是都無法取用到TemplateField中所使用到的控制項。

目前的解決方式就是去改用GridView的OnRowCommand()函式,並在這個函式中,取得正在編輯的Row的控制項。

範例:


protected void OnITResRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Update")
            {
                int rowIndex = -1;
                if (int.TryParse(e.CommandArgument.ToString(), out rowIndex) == false)
                    return;

                DropDownList dlEditTeam = (DropDownList)this.gvITResourceSetting.Rows[rowIndex].FindControl("dlEditTeam");
                if (dlEditTeam != null)
                {
                    this.dsITResource.UpdateParameters["TeamID"].DefaultValue = dlEditTeam.SelectedValue;  
                }
            }

        }

留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式

使用regular expression來match中括號(square bracket)