none
GridView里的TemplateField的更新如何传给SqlDataSource RRS feed

  • 问题

  • 用  <asp:Parameter Name="Status" Type="String" /> 得不到值

    用<asp:ControlParameter ControlID="DropDownList1" Name="Status" PropertyName="SelectedValue" /> 找不到控件

    2012年2月17日 5:59

答案

  • 不曉得你是不是要讓SqlDataSource進行Update的時候,讀取GridView中Template裡的Control內容?

    我以下列程式碼作範例:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SqlDataSourceDemo.aspx.cs" Inherits="WebApplication1.SqlDataSourceDemo" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="Button" />
            <br />
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="RegionID" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField DataField="RegionID" HeaderText="RegionID" ReadOnly="True" 
                        SortExpression="RegionID" />
                    <asp:TemplateField HeaderText="RegionDescription" 
                        SortExpression="RegionDescription">
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Eval("RegionDescription") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="txtRegionDescription" runat="server" 
                                Text='<%# Bind("RegionDescription") %>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:CommandField ShowEditButton="True" />
                </Columns>
                <EmptyDataTemplate>
                    No Data.
                </EmptyDataTemplate>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
                SelectCommand="SELECT RegionID, RegionDescription FROM Region WHERE (RegionID = @Region)" 
                UpdateCommand="UPDATE Region SET RegionDescription = @RegionDescription WHERE (RegionID = @RegionID)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="TextBox1" Name="Region"
                        PropertyName="" ConvertEmptyStringToNull="false" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:ControlParameter ControlID="GridView1" Name="RegionID" PropertyName="SelectedValue" />
                </UpdateParameters>
            </asp:SqlDataSource>    
        </div>
        </form>
    </body>
    </html>
    
    上述程式碼是用來更新Region資料表的RegionDescription欄位。

    1.您不需要設定任何UpodateParameters指到UpdateCommand中的@RegionDescription參數。

    2.只需在EditTemplate中利用雙向資料繫結的Bind Expression來設定@RegionDescription的值是要由txtRegionDescription的Text屬性取得。如下列程式碼:

    <asp:TextBox ID="txtRegionDescription" runat="server" Text='<%# Bind("RegionDescription") %>'></asp:TextBox>


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年2月17日 7:11

全部回复

  • 第一种办法应该可以,请确定你是否TemplateField中Bind的名称也是Status。务必请保持一致!

    或者更新的时候采用GridView_RowUpdating方式:http://www.cnblogs.com/superfeeling/archive/2011/03/11/1980606.html


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处


    2012年2月17日 6:09
  • 看下这个用法,这样更灵活

    http://blog.csdn.net/zx13525079024/article/details/6056901


    http://blog.csdn.net/zx13525079024

    2012年2月17日 6:27
  • 不曉得你是不是要讓SqlDataSource進行Update的時候,讀取GridView中Template裡的Control內容?

    我以下列程式碼作範例:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SqlDataSourceDemo.aspx.cs" Inherits="WebApplication1.SqlDataSourceDemo" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="Button" />
            <br />
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataKeyNames="RegionID" DataSourceID="SqlDataSource1">
                <Columns>
                    <asp:BoundField DataField="RegionID" HeaderText="RegionID" ReadOnly="True" 
                        SortExpression="RegionID" />
                    <asp:TemplateField HeaderText="RegionDescription" 
                        SortExpression="RegionDescription">
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Eval("RegionDescription") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox ID="txtRegionDescription" runat="server" 
                                Text='<%# Bind("RegionDescription") %>'></asp:TextBox>
                        </EditItemTemplate>
                    </asp:TemplateField>
                    <asp:CommandField ShowEditButton="True" />
                </Columns>
                <EmptyDataTemplate>
                    No Data.
                </EmptyDataTemplate>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
                SelectCommand="SELECT RegionID, RegionDescription FROM Region WHERE (RegionID = @Region)" 
                UpdateCommand="UPDATE Region SET RegionDescription = @RegionDescription WHERE (RegionID = @RegionID)">
                <SelectParameters>
                    <asp:ControlParameter ControlID="TextBox1" Name="Region"
                        PropertyName="" ConvertEmptyStringToNull="false" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:ControlParameter ControlID="GridView1" Name="RegionID" PropertyName="SelectedValue" />
                </UpdateParameters>
            </asp:SqlDataSource>    
        </div>
        </form>
    </body>
    </html>
    
    上述程式碼是用來更新Region資料表的RegionDescription欄位。

    1.您不需要設定任何UpodateParameters指到UpdateCommand中的@RegionDescription參數。

    2.只需在EditTemplate中利用雙向資料繫結的Bind Expression來設定@RegionDescription的值是要由txtRegionDescription的Text屬性取得。如下列程式碼:

    <asp:TextBox ID="txtRegionDescription" runat="server" Text='<%# Bind("RegionDescription") %>'></asp:TextBox>


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年2月17日 7:11