Telerik RadGrid插入失败 - 无法输入空值

时间:2015-02-23 17:20:18

标签: asp.net telerik radgrid

我有一个使用RadGrid的telerik SqlDataSource。 我为insert / select / update语句等设置了参数,但在尝试添加新记录时,我收到了这个错误......

Cannot insert the value NULL into column 'fld_title', table 'DB_Tests.dbo.tbl_posts'; column does not allow nulls. INSERT fails.
The statement has been terminated.

修改

我的问题最初可能不清楚 - 我实际上并不想在数据库中输入空值,我想添加使用add new record命令选项输入的数据。 所以我的问题是......  为什么我得到空值而不是我输入的数据?

这是我的完整代码。

<telerik:RadGrid id="pageGrid" runat="server"
        AutoGenerateColumns="false"
        DataSourceID="pageSrc"
        AutoGenerateDeleteColumn="false"
        AutoGenerateEditColumn="true"
        AllowAutomaticInserts="true"
        AllowAutomaticUpdates="true"
        BackColor="#d9e8ff"
        BorderColor="#000066"



        >
        <MasterTableView CommandItemDisplay="Top">

            <Columns>
                <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_title" HeaderText="Title" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_short_desc" HeaderText="Short Description" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_text" HeaderText="Text" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_cat" HeaderText="Category" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_live" HeaderText="Live?" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
            </Columns>

        </MasterTableView>




 </telerik:RadGrid>

    <asp:SqlDataSource ID="pageSrc" runat="server"
    ConnectionString="<%$ ConnectionStrings:localTest %>"
    DeleteCommand="DELETE FROM tbl_posts WHERE pk_ID = @pk_ID"
    InsertCommand="INSERT INTO [tbl_posts] VALUES (@title, @short_desc, @text, @cat, @live)"
    SelectCommand="SELECT [pk_ID], [fld_title], [fld_short_desc], [fld_text], [fld_cat] , fld_live FROM [tbl_posts]"
    UpdateCommand="UPDATE [tbl_posts] SET [fld_title] = @title, [fld_short_desc] = @short_desc, [fld_text] = @text, [fld_cat] = @cat, [fld_live] = @live WHERE [pk_ID] = @pk_ID">
    <DeleteParameters>
        <asp:Parameter Name="pk_ID" Type="Int32"></asp:Parameter>
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="pk_ID" Type="Int32" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="title" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="short_desc" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="text" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="cat" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="live" Type="Boolean" ConvertEmptyStringToNull="false"></asp:Parameter>
    </InsertParameters>
    <UpdateParameters>
         <asp:Parameter Name="pk_ID" Type="Int32" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="title" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="short_desc" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="text" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="cat" Type="String" ConvertEmptyStringToNull="false"></asp:Parameter>
        <asp:Parameter Name="live" Type="Boolean" ConvertEmptyStringToNull="false"></asp:Parameter>
    </UpdateParameters>
</asp:SqlDataSource>

修改 我已经读过人们有类似问题的其他问题,但是他们都通过正确配置参数来解决,我相信我的。

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:0)

添加验证并错误处理ItemInserted和InsertCommand事件:http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/automatic-crud-operations/defaultcs.aspx 网格无法为您验证缺失值,因此您必须处理此问题。

为了进一步说明这一点 - 考虑通过网格事件自己创建数据源操作,这样您就可以轻松验证内容,而不是使用自动操作:http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/manual-crud-operations/defaultcs.aspx

此外,您可以自己定义编辑表单,这样您就可以使用更多的compex控件并添加客户端验证以防止不需要的回发:http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/form-template-update/defaultcs.aspx

答案 1 :(得分:0)

您的UniqueName属性必须与参数名称相同。

 <Columns>
            <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_title" UniqueName="title" HeaderText="Title" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
            <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_short_desc" UniqueName="short_desc" HeaderText="Short Description" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
            <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_text" UniqueName="text" HeaderText="Text" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
            <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_cat" UniqueName="cat" HeaderText="Category" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
            <telerik:GridBoundColumn runat="server" AllowSorting="true" DataField="fld_live" UniqueName="live" HeaderText="Live?" HeaderStyle-BackColor="#ff66ff"></telerik:GridBoundColumn>
        </Columns>

您似乎也缺少用作参数的PK_ID字段。您需要添加GridBoundColumn以便CRUD操作找到它,然后确保UniqueName属性反映参数名称。

答案 2 :(得分:-3)

转到SQL Server Management并选择该表并允许空值。这将解决问题。