Asp.net 如何使用GridView编辑功能修改依赖于其他字段的字段

Asp.net 如何使用GridView编辑功能修改依赖于其他字段的字段,asp.net,.net,gridview,webforms,Asp.net,.net,Gridview,Webforms,很抱歉,标题太复杂了,但这是我能想到的最好的表达方式 基本上,我有一列数据是一个URL(我们称之为URL-a),另一列是隐藏的,也是一个URL(URL-B)。我在代码隐藏中有一个名为ConvertURL(stringurlin)的函数,它将获取URL-a并将其转换为URL-B 因此,在这个gridview中,如果有人要使用本机gridview/datasource功能编辑条目并更改URL-A,我如何让它通过ConvertURL()运行这个新的URL-A并更新URL-B字段 下面是代码的简单表示(

很抱歉,标题太复杂了,但这是我能想到的最好的表达方式

基本上,我有一列数据是一个URL(我们称之为URL-a),另一列是隐藏的,也是一个URL(URL-B)。我在代码隐藏中有一个名为ConvertURL(stringurlin)的函数,它将获取URL-a并将其转换为URL-B

因此,在这个gridview中,如果有人要使用本机gridview/datasource功能编辑条目并更改URL-A,我如何让它通过ConvertURL()运行这个新的URL-A并更新URL-B字段

下面是代码的简单表示(不是实际代码):

代码隐藏功能:

public string ConvertURL(string URLin)
{
    Int32 iLocation = URLin.IndexOf("WWW.XYZ.COM");
    if (iLocation >= 0)
    {
        string checkurl = URLin.Replace("WWW.XYZ.COM", "STAGING.XYZ.COM"); 
        return checkurl;
    }
    else 
    {
        return URLin;
    }
}
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:My_AppConnectionString %>" 
    SelectCommand="SELECT [URL_A], [URL_B], [URLName] FROM [My_App] WHERE ([IsActive] = @IsActive)"
      OldValuesParameterFormatString="original_{0}" 
        UpdateCommand="UPDATE [My_App] SET [URL_A] = @URL_A, [URL_B] = @URL_B, [URLName] = @URLName, [IsActive] = @IsActive WHERE [ID] = @original_ID">
        <SelectParameters>
            <asp:Parameter DefaultValue="True" Name="IsActive" Type="Boolean" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="URL_A" Type="String" />
            <asp:Parameter Name="URL_B" Type="String" />
            <asp:Parameter Name="URLName" Type="String" />
            <asp:Parameter Name="IsActive" Type="boolean" />
            <asp:Parameter Name="original_ID" Type="Int32" />
            <asp:Parameter Name="original_URL_A" Type="String" />
            <asp:Parameter Name="original_URL_B" Type="String" />
            <asp:Parameter Name="original_URLName" Type="String" />
        </UpdateParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        onrowediting="GridView1_RowEditing"   
        AutoGenerateColumns="False" CellPadding="3" DataKeyNames="ID" 
        DataSourceID="SqlDataSource1" EnableModelValidation="False" ForeColor="Black" 
        GridLines="Vertical" AllowSorting="True" BackColor="White" 
        BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
        AutoGenerateEditButton="True" CausesValidation="false">
        <AlternatingRowStyle BackColor="#CCCCCC" />
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="ID" Visible="False" />
            <asp:BoundField DataField="URL_A" HeaderText="URL A" 
                SortExpression="URL_A" />
            <asp:BoundField DataField="URL_B" HeaderText="URL B" 
                SortExpression="URL_B" **Visible="False"** />
            <asp:BoundField DataField="URLName" HeaderText="URL Name" 
                SortExpression="URLName" />
            <asp:CheckBoxField DataField="IsActive" HeaderText="Active" 
                SortExpression="IsActive" />
        </Columns>
        <FooterStyle BackColor="#CCCCCC" />
        <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    </asp:GridView>
数据源:

public string ConvertURL(string URLin)
{
    Int32 iLocation = URLin.IndexOf("WWW.XYZ.COM");
    if (iLocation >= 0)
    {
        string checkurl = URLin.Replace("WWW.XYZ.COM", "STAGING.XYZ.COM"); 
        return checkurl;
    }
    else 
    {
        return URLin;
    }
}
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:My_AppConnectionString %>" 
    SelectCommand="SELECT [URL_A], [URL_B], [URLName] FROM [My_App] WHERE ([IsActive] = @IsActive)"
      OldValuesParameterFormatString="original_{0}" 
        UpdateCommand="UPDATE [My_App] SET [URL_A] = @URL_A, [URL_B] = @URL_B, [URLName] = @URLName, [IsActive] = @IsActive WHERE [ID] = @original_ID">
        <SelectParameters>
            <asp:Parameter DefaultValue="True" Name="IsActive" Type="Boolean" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="URL_A" Type="String" />
            <asp:Parameter Name="URL_B" Type="String" />
            <asp:Parameter Name="URLName" Type="String" />
            <asp:Parameter Name="IsActive" Type="boolean" />
            <asp:Parameter Name="original_ID" Type="Int32" />
            <asp:Parameter Name="original_URL_A" Type="String" />
            <asp:Parameter Name="original_URL_B" Type="String" />
            <asp:Parameter Name="original_URLName" Type="String" />
        </UpdateParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        onrowediting="GridView1_RowEditing"   
        AutoGenerateColumns="False" CellPadding="3" DataKeyNames="ID" 
        DataSourceID="SqlDataSource1" EnableModelValidation="False" ForeColor="Black" 
        GridLines="Vertical" AllowSorting="True" BackColor="White" 
        BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
        AutoGenerateEditButton="True" CausesValidation="false">
        <AlternatingRowStyle BackColor="#CCCCCC" />
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="ID" Visible="False" />
            <asp:BoundField DataField="URL_A" HeaderText="URL A" 
                SortExpression="URL_A" />
            <asp:BoundField DataField="URL_B" HeaderText="URL B" 
                SortExpression="URL_B" **Visible="False"** />
            <asp:BoundField DataField="URLName" HeaderText="URL Name" 
                SortExpression="URLName" />
            <asp:CheckBoxField DataField="IsActive" HeaderText="Active" 
                SortExpression="IsActive" />
        </Columns>
        <FooterStyle BackColor="#CCCCCC" />
        <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    </asp:GridView>

最后是GridView:

public string ConvertURL(string URLin)
{
    Int32 iLocation = URLin.IndexOf("WWW.XYZ.COM");
    if (iLocation >= 0)
    {
        string checkurl = URLin.Replace("WWW.XYZ.COM", "STAGING.XYZ.COM"); 
        return checkurl;
    }
    else 
    {
        return URLin;
    }
}
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:My_AppConnectionString %>" 
    SelectCommand="SELECT [URL_A], [URL_B], [URLName] FROM [My_App] WHERE ([IsActive] = @IsActive)"
      OldValuesParameterFormatString="original_{0}" 
        UpdateCommand="UPDATE [My_App] SET [URL_A] = @URL_A, [URL_B] = @URL_B, [URLName] = @URLName, [IsActive] = @IsActive WHERE [ID] = @original_ID">
        <SelectParameters>
            <asp:Parameter DefaultValue="True" Name="IsActive" Type="Boolean" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="URL_A" Type="String" />
            <asp:Parameter Name="URL_B" Type="String" />
            <asp:Parameter Name="URLName" Type="String" />
            <asp:Parameter Name="IsActive" Type="boolean" />
            <asp:Parameter Name="original_ID" Type="Int32" />
            <asp:Parameter Name="original_URL_A" Type="String" />
            <asp:Parameter Name="original_URL_B" Type="String" />
            <asp:Parameter Name="original_URLName" Type="String" />
        </UpdateParameters>
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        onrowediting="GridView1_RowEditing"   
        AutoGenerateColumns="False" CellPadding="3" DataKeyNames="ID" 
        DataSourceID="SqlDataSource1" EnableModelValidation="False" ForeColor="Black" 
        GridLines="Vertical" AllowSorting="True" BackColor="White" 
        BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
        AutoGenerateEditButton="True" CausesValidation="false">
        <AlternatingRowStyle BackColor="#CCCCCC" />
        <Columns>
            <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
                ReadOnly="True" SortExpression="ID" Visible="False" />
            <asp:BoundField DataField="URL_A" HeaderText="URL A" 
                SortExpression="URL_A" />
            <asp:BoundField DataField="URL_B" HeaderText="URL B" 
                SortExpression="URL_B" **Visible="False"** />
            <asp:BoundField DataField="URLName" HeaderText="URL Name" 
                SortExpression="URLName" />
            <asp:CheckBoxField DataField="IsActive" HeaderText="Active" 
                SortExpression="IsActive" />
        </Columns>
        <FooterStyle BackColor="#CCCCCC" />
        <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    </asp:GridView>

总结一下:用户将看到一个gridview,其中有3个字段需要编辑,其中一个是URL_A(URL_B是隐藏的)。当他们点击编辑并更新URL_A字段时,我想通过ConvertURL()函数运行URL_A,并在执行更新时将该输出用作URL_B的数据

我提前感谢你的帮助

使用网格视图的,并更改URL_B的新值。在这种情况下,您将不得不更改行的旧值和新值。在将新值发送到数据源进行实际更新之前,可以更改这些值

将事件处理程序添加到ASPX中的网格视图:

<asp:GridView ID="GridView1" runat="server" 
    ...
    OnRowUpdating="GridView1_RowUpdating">

太好了,谢谢!这正是我想弄明白的。