none
如何update GridView的欄位data? RRS feed

  • 問題

  •   我用GridView顯示資料, 也選取到我要update的這筆資料(row), 程式如下:

     
            protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
            {
                // Get the currently selected row using the SelectedRow property.
                GridViewRow row = GridView1.SelectedRow;

                LblMessage.Visible = true;
                LblMessage.Text = "You select " + row.Cells[2].Text + ".";

                //Update 2個欄位值
                SqlDataSource1.UpdateParameters["還書日期"].DefaultValue = "106.08.06";
                SqlDataSource1.UpdateParameters["已還旗標"].DefaultValue = "Y";
                SqlDataSource1.Update();
            }

     
    已經選取到這筆資料(row), 我需要update這筆資料的2個欄位(還書日期, 已還旗標)
    還書日期要update成106.08.06
    已還旗標要update成Y

    我參考一本書的Insert例子(如下面3行), 我依樣畫葫蘆改為程式中update那3行,  但是執行時卻出現錯誤,
    無法update, 請問各位前輩, 我要如何做, 才能update成功?

    SqlDataSource1.InsertParameters["編號"].DefaultValue = TxtNo.Text;
    SqlDataSource1.InsertParameters["音色 50"].DefaultValue = TxtTone.Text;
    SqlDataSource1.Insert();



    2017年8月6日 下午 03:04

解答

所有回覆

  • 你方便把你 .aspx 的 SqlDataSource 的代碼貼出來嗎?

    另外,你說執行時卻出現錯誤? 是什麼樣子的錯誤,可以貼出來嗎? 

    參考:

    SqlDataSource.Update 方法 ()


    2017年8月6日 下午 07:00
  • "音色 50"這個參數名稱中間有空格嗎?
    2017年8月7日 上午 12:24
  • "音色 50" 中間有空格
    2017年8月7日 上午 02:45
  • Peter, 附上原始碼與錯誤訊息, 請參考.

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm5.aspx.cs" Inherits="BoneWeb.WebForm5" %>

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <br />
                <asp:Label ID="Label1" runat="server" Text="圖書號"></asp:Label>
    &nbsp;&nbsp;&nbsp;
                <asp:TextBox ID="TextBox1" runat="server" BorderStyle="Solid"></asp:TextBox>
                &nbsp;&nbsp;&nbsp;
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="查詢" />
                <br />
                <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:BooksConnectionString4 %>" SelectCommand="SELECT 借閱表.序號, 借閱表.圖書號, 書籍.書名, 書籍.作者, 書籍.出版社, 借閱表.借閱人學號, 學員.姓名, 借閱表.借閱日期, 借閱表.還書日期, 借閱表.已還旗標 FROM 借閱表 INNER JOIN 書籍 ON 借閱表.圖書號 = 書籍.圖書號 INNER JOIN 學員 ON 借閱表.借閱人學號 = 學員.學號 WHERE (借閱表.圖書號 = @圖書號) AND (借閱表.已還旗標 &lt;&gt; @已還旗標)">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="TextBox1" Name="圖書號" PropertyName="Text" Type="String" />
                        <asp:Parameter DefaultValue="Y" Name="已還旗標" Type="String" />
                    </SelectParameters>
                </asp:SqlDataSource>
                <br />
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="序號" DataSourceID="SqlDataSource1" OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
                    <Columns>
                        <asp:CommandField ShowSelectButton="True" />
                        <asp:BoundField DataField="序號" HeaderText="序號" ReadOnly="True" SortExpression="序號" />
                        <asp:BoundField DataField="圖書號" HeaderText="圖書號" SortExpression="圖書號" />
                        <asp:BoundField DataField="書名" HeaderText="書名" SortExpression="書名" />
                        <asp:BoundField DataField="作者" HeaderText="作者" SortExpression="作者" />
                        <asp:BoundField DataField="出版社" HeaderText="出版社" SortExpression="出版社" />
                        <asp:BoundField DataField="借閱人學號" HeaderText="借閱人學號" SortExpression="借閱人學號" />
                        <asp:BoundField DataField="姓名" HeaderText="姓名" SortExpression="姓名" />
                        <asp:BoundField DataField="借閱日期" HeaderText="借閱日期" SortExpression="借閱日期" />
                        <asp:BoundField DataField="還書日期" HeaderText="還書日期" SortExpression="還書日期" />
                        <asp:BoundField DataField="已還旗標" HeaderText="已還旗標" SortExpression="已還旗標" />
                    </Columns>
                </asp:GridView>
                <br />
            </div>
            <asp:Button ID="BtnQuit" runat="server" OnClick="BtnQuit_Click" Text="回上頁" />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <br />
            <br />
            <br />
            <asp:Label ID="LblMessage" runat="server" Visible="False"></asp:Label>
        </form>
    </body>
    </html>

    發生錯誤那行指令

       SqlDataSource1.UpdateParameters["還書日期"].DefaultValue = "106.08.06";

    錯誤訊息, 如下:

    發生 System.NullReferenceException
      HResult=0x80004003
      Message=並未將物件參考設定為物件的執行個體。
      Source=BoneWeb
      StackTrace: 
       於 BoneWeb.WebForm5.GridView1_SelectedIndexChanged(Object sender, EventArgs e) 在 d:\Code\BoneWeb\BoneWeb\WebForm5.aspx.cs:行 62 中

    2017年8月7日 上午 03:16
  • 應該是您的SqlDataSource並未建立UpdateCommand與InsertCommand造成的, 請參考這篇文件為您的SqlDataSource建立UpdateCommand與InsertCommand, 才會有InsertParameters與UpdateParameters可供使用:

    Inserting, Updating, and Deleting Data with the SqlDataSource (C#)

    • 已標示為解答 AceGo 2017年8月8日 上午 05:20
    2017年8月7日 上午 03:22
  •  設定UpdateCommand, SqlDataSource1.UpdateParameters.Add

    後就沒有錯誤訊息, 且該筆資料也update正確成功. 謝謝Peter與tihs協助.

    修改之後, 程式如下:

     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
            {
                string SeqNo;

                // Get the currently selected row using the SelectedRow property.
                GridViewRow row = GridView1.SelectedRow;

                // Display the first name from the selected row.
                // In this example, the third column (index 2) contains
                // the first name.

                LblMessage.Visible = true;
                LblMessage.Text = "You select " + row.Cells[1].Text + ".";

                //序號
                SeqNo = row.Cells[1].Text;

                SqlDataSource1.UpdateCommand= "Update 借閱表 set 還書日期='2017.08.06', 已還旗標='Y' Where 已還旗標<>'Y' ";
                SqlDataSource1.UpdateCommand = SqlDataSource1.UpdateCommand + " And 序號=@SeqNo ";

                SqlDataSource1.UpdateParameters.Add("SeqNo", SeqNo);
                SqlDataSource1.Update();
             }
        }

    2017年8月8日 上午 05:21