iT邦幫忙

0

POSTBACK更新DropDownList資料無法更新

  • 分享至 

  • xImage

Hi 各位前輩好
我在datasource Insert資料道資料庫後,Postback更新DropdownList資料的時候遇到了無法更新的問題,煩請各位高手指導

首先,我在aspx定義了一個DataSource與一個DropDownList

<asp:DropDownList ID="dlLot" runat="server" AutoPostBack="True"></asp:DropDownList>

<asp:SqlDataSource ID="dsLot" runat="server"
ConnectionString="<%$ ConnectionStrings:MY_SYS %>"
SelectCommand=
"SELECT distinct Lot
FROM DEFINITION
where 1=1 "
InsertCommand="INSERT INTO DEFINITION (Lot) VALUES (@Lot) "
OnInserted="dsLot_Inserted" >
</asp:SqlDataSource>

在DataSource我定義了一個dsLot_Inserted function , 資料庫正確Insert資料後也的確有進入這個函式
且程式也正確執行無任何錯誤
protected void dsLot_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
dlLot.DataValueField = "Lot";
dlLot.DataTextField = "Lot";
dlLot.DataSource = dsLot;
dlLot.DataBind();
}
但DropDownList上的資料並沒有更新,但我在資料庫看資料在執行dlLot.DataSource = dsLot; 前就已經成功新增了
感覺有點像是POSTBACK執行元件更新之後才來執行dsLot_Inserted
我試著新增了一個 button和一個click事件做了一樣的事情, 執行完dsLot_Inserted去按一下 ,
DropDownList dlLot就更新資料了....請教各位前輩要如何解決這個問題

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"/>

protected void Button1_Click(object sender, EventArgs e)
{
dlLot.DataValueField = "Lot";
dlLot.DataTextField = "Lot";
dlLot.DataSource = dsLot;
dlLot.DataBind();
}

優悠 iT邦新手 3 級 ‧ 2019-07-24 15:57:45 檢舉
你使用了具名參數,可是卻沒給它數值
你的這段 InsertCommand="INSERT INTO DEFINITION (Lot) VALUES (@Lot) "
要補 sqlcmd.Parameters.AddWithValue("@Lot", 1); // 設定參數@Lot的值。
這一段是有賦予值的 , 資料可正確塞入資料庫 , 我貼上來發問時漏掉了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
sion
iT邦新手 4 級 ‧ 2019-07-24 11:22:24

把dlLot.DataBind();寫在pageload,每次觸發事件就會bind一次

protected void Page_Load(object sender, EventArgs e)
{
    DropDownListBind();
}
/////////////////////////////////////////
private void DropDownListBind()
{
    dlLot.DataValueField = "Lot";
    dlLot.DataTextField = "Lot";
    dlLot.DataSource = dsLot;
    dlLot.DataBind();
}

我後來找到原因了 , 應該是我使用了Devexpress的產品的ASPxGridView元件。只要只用這個元件綁定DataSource之後 , 我在DataSource的dsLot_Inserted事件中 , 我Debug去看程式有觸發這個事件但是卻沒有更新元件 , 用.net的GridView卻可以正確執行 , 我再回報給DEVEXPRESS看看 , 有任何更新再分享

我要發表回答

立即登入回答