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

Telerik RadGrid Insert Fails - Cannot enter null value

我有一个 telerik RadGrid,使用 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>

编辑 我读过其他人有类似问题的问题,但是他们都通过正确配置参数解决了,我相信我的也是。

谁能给我指出正确的方向?

转到 SQL 服务器管理和 select table 并允许空值。这将解决问题。

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

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

您的 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 属性 反映参数名称。