【问题标题】:ASP.NET DevExpress Gridview update operationASP.NET DevExpress Gridview 更新操作
【发布时间】:2017-06-25 18:29:46
【问题描述】:

net devexpress 控件。首先,我尝试在 gridview 上实现这个编辑命令。一切似乎都很好,但我遇到的唯一一个问题是,当我尝试单击编辑链接时,会出现一个弹出表单,我无法在框内输入。最后,当我单击“更新”按钮时,会出现错误提示“对象引用未设置为对象的实例”。请帮我解决这种情况,我在哪里犯了错误。感谢您。

<%@ Register assembly="DevExpress.Web.v17.1, Version=17.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" namespace="DevExpress.Web" tagprefix="dx" %>


<asp:Content runat="server" ID="BodyContent1" ContentPlaceHolderID="ContentPlaceHolder1">

<dx:ASPxGridView ID="GridView1" runat="server" ClientInstanceName="GridView1"
        KeyFieldName="TestConfigId" AutoGenerateColumns="False" Width="850px"            
        OnRowUpdating="Gridview1_RowUpdating" >
<Columns>             
            <dx:GridViewDataTextColumn Caption="TestConfigId" FieldName="TestConfigId" Name="TestConfigId" Visible="true" VisibleIndex="0">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn Caption="Main Test" FieldName="MainTest" Name="MainTest" Settings-AllowSort="False" VisibleIndex="1" >
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn Caption="Sub Test" FieldName="SubTest" Name="SubTest" Settings-AllowSort="False" VisibleIndex="2" >
            </dx:GridViewDataTextColumn>

<dx:GridViewCommandColumn  ShowEditButton="true" VisibleIndex="3" Width="100" FixedStyle="Left">
</dx:GridViewCommandColumn>

        </Columns>

        <Settings HorizontalScrollBarMode="Visible"/>
        <SettingsBehavior AutoExpandAllGroups="true"/>
        <SettingsBehavior AllowFocusedRow="True"/>
        <SettingsResizing ColumnResizeMode="NextColumn"/>

<Styles>
            <FixedColumn BackColor="LightYellow"></FixedColumn>
        </Styles>

        <Settings ShowStatusBar="Visible" />
        <SettingsEditing Mode="PopupEditForm" />
    </dx:ASPxGridView>
    <dx:ASPxPopupControl ID="popupSample" runat="server" ShowCloseButton="true" ShowHeader="true" 
    PopupHorizontalAlign="WindowCenter" PopupVerticalAlign="WindowCenter">
    </dx:ASPxPopupControl>
</asp:Content>

代码隐藏文件

 protected void Gridview1_RowUpdating(object sender, ASPxDataUpdatingEventArgs e)
{
    SqlConnection con = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "update_test_configuration";
    cmd.Parameters.Add("@TestConfigId", SqlDbType.Int).Value = Convert.ToInt32(e.NewValues["TestConfigId"]);       
    cmd.Parameters.Add("@MainTest", SqlDbType.NVarChar).Value = e.NewValues["MainTest"].ToString();
    cmd.Parameters.Add("@SubTest", SqlDbType.NVarChar).Value = e.NewValues["SubTest"].ToString();

cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
con.Dispose();
}

存储过程

CREATE PROCEDURE [dbo].[update_test_configuration]
@TestConfigId int = 0,
@MainTest nvarchar(100),
@SubTest nvarchar(100)

AS

BEGIN

  SET NOCOUNT ON;

  UPDATE    dbo.TestConfigMaster 

  SET       MainTest    = @MainTest,
            SubTest     =@SubTest

    WHERE   TestConfigId = @TestConfigId                
END

【问题讨论】:

    标签: c# asp.net gridview devexpress


    【解决方案1】:

    如果 e.NewValues["MainTest"] 为 null,则 e.NewValues["MainTest"].ToString() 将生成错误,因为您无法在 null 引用上调用 ToString()。也就是说,你不能说“null.ToString()”。

    同样将应用其余字段,即 TestConfigId 和 SubTest。

    也许你可以试试这个方法:

    cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter { SqlDbType = System.Data.SqlDbType.NVarChar, ParameterName = "@MainTest", Value = $"{ e.NewValues["MainTest"] }" });
    

    等等

    【讨论】:

    • 但我是弹出式表单不可编辑。我无法在上面打字
    • 当我点击“更新”时显示“不支持指定的方法”
    • 我可以看到您在网格中设置了主键列。还要检查您的数据库表并确保将 TestConfigId 设置为主键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多