0

グリッドビューでテーブルを編集するときに、空の文字列を null に変換しようとしています。私はいくつかの反復と方法を試しましたが、成功しませんでした。問題は私にあると思われObjectDataSourceますが、必要な正しい構文がわかりません。

<asp:GridView 
    ID="grdMyDistributors"
    DataSourceID = "srcGetMyDistributors" 
    CssClass="GridViewStyle"
    DataKeyNames = "ID_Distributor"
    AutoGenerateColumns = "false" AutoGenerateEditButton = "true"
    GridLines="None"
    runat="server" >
    <Columns>
    <asp:BoundField
        DataField="DistributorName"
        HeaderText="Distributor" 
        convertemptystringtonull="true"
        ReadOnly = "True" />
    <asp:BoundField
        DataField="Distributor_Email_1"
        HeaderText="Distributor Email 1"
        convertemptystringtonull="true" >
        <ItemStyle BackColor="#f6f17c"/>
    </asp:BoundField>
    <asp:BoundField
        DataField="Distributor_Email_2"
        HeaderText="Distributor Email 2"
        convertemptystringtonull="true" >
        <ItemStyle BackColor="#f6f17c"/>
    </asp:BoundField>
    <asp:BoundField
        DataField="Minimum_Purchase_Amount"
        HeaderText="Minimum Purchase Amount"
        dataformatstring="{0:c}"
        convertemptystringtonull="true" >
        <ItemStyle BackColor="#f6f17c" />
    </asp:BoundField>
    </Columns> 
</asp:GridView>

これが私のものObjectDataSourceです:

    <asp:ObjectDataSource 
        ID="srcGetMyDistributors" 
        TypeName = "AAA.Distributors"
        SelectMethod = "GetDistributorsPagingFiltered"
        UpdateMethod = "UpdateDistributors"
        EnableCaching="false"
        ConvertNulltoDBNull = "true"
        runat="server" >
        <SelectParameters>
            <asp:ProfileParameter Name="ID_Account" PropertyName="ID_Account" />
        </SelectParameters>
        <UpdateParameters>
            <asp:ControlParameter ControlID="grdMyDistributors" Name="ID_Distributor" PropertyName="SelectedValue" Type="Int32" />
        </UpdateParameters>
    </asp:ObjectDataSource>

これが私の更新方法です

    Public Shared Sub UpdateDistributors(ByVal ID_Distributor As Integer, ByVal Distributor_Email_1 As String, ByVal Distributor_Email_2 As String, ByVal Minimum_Purchase_Amount As Decimal)
        ' Initialize command
        Dim con As New SqlConnection(_connectionString)
        Dim cmd As New SqlCommand("UpdateDistributors", con)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Connection = con

        ' Initialize parameters
        cmd.Parameters.AddWithValue("@ID_Distributor", A2AID_Restaurant_To_Distributor)
        cmd.Parameters.AddWithValue("@Distributor_Email_1", Distributor_Email_1)
        cmd.Parameters.AddWithValue("@Distributor_Email_2", Distributor_Email_2)
        cmd.Parameters.AddWithValue("@Minimum_Purchase_Amount", Minimum_Purchase_Amount)

        ' Execute command
        Using (con)
            con.Open()
            cmd.ExecuteNonQuery()
        End Using

    End Sub

コードをそのまま実行すると、「'System.DBNull' 型のオブジェクトは 'System.String' 型に変換できません」というエラーが表示されます。Update メソッドに送信しようとしていて、文字列を期待しているときに、エラーが発生する可能性が最も高くなります。ObjectDataSource から "ConvertNulltoDBNull = "true" を取り出すと、SQL ステートメントが値を期待していると不平を言います (つまり、Null を送信していないことを意味します)。これについて非常に多くのバリエーションを試しましたが、クラスライブラリ.どんな助けでも大歓迎です!

前もって感謝します!

4

1 に答える 1

0

gridview列にeval()を使用します

<%# Eval("DistributorName") == DBNull.Value ? "" : value.ToString()%>

(C#で)

 <asp:GridView 
ID="grdMyDistributors"
DataSourceID = "srcGetMyDistributors" 
CssClass="GridViewStyle"
DataKeyNames = "ID_Distributor"
AutoGenerateColumns = "false"
AutoGenerateEditButton = "true"
GridLines="None"
runat="server" >
 <Columns>
    <asp:TemplateField HeaderText="Seniority">
        <ItemTemplate>
           <%# Eval("DistributorName") == DBNull.Value ? "" :Eval("DistributorName").ToString()%>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

于 2012-04-10T17:15:25.993 に答える