Как использовать функциональность редактирования GridView для изменения поля, которое опирается на другое поле - PullRequest
0 голосов
/ 16 ноября 2011

Извините за запутанный заголовок, но я думаю, что это лучший способ сформулировать его.

По сути, у меня есть столбец данных, который является URL-адресом (назовем его URL-A), а другой - скрытый, который также является URL-адресом (URL-B). У меня в коде есть функция ConvertURL (строка URLin), которая возьмет URL-A и превратит его в URL-B.

Итак, если в этом сеточном представлении кто-то должен был отредактировать запись, используя встроенную функциональность gridview / источника данных и изменить URL-A, как мне заставить его запустить этот новый URL-A через ConvertURL () и обновить 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>

И, наконец, GridView:

<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>

Итак, подведем итог: пользователь увидит сетку с 3 полями для редактирования, одним из которых является URL_A (URL_B скрыт). Когда они нажимают изменить и обновить поле URL_A, я хочу запустить URL_A с помощью функции ConvertURL () и использовать эти выходные данные в качестве данных для URL_B при выполнении обновления.

Заранее благодарен за помощь!

1 Ответ

1 голос
/ 08 декабря 2011

Используйте событие RowUpdating вида сетки и измените новое значение для URL_B. В этом случае у вас будет доступ к старым значениям строки и новым значениям. Вы можете изменить новые значения перед их отправкой в ​​источник данных для фактического обновления.

Добавьте обработчик событий в представление сетки в ASPX:

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

А в файле кода обработать событие:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{
    // Find the current value for URL_A
    string urlA = (string)e.NewValues["URL_A"];
    // Get the corresponding value for URL_B from the method
    string urlB = ConvertURL(urlA);
    // Set the new value for the URL_B column before it's sent to the SqlDataSource
    e.NewValues["URL_B"] = urlB;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...