c# - 在 FormView 中插入后获取返回值

标签 c# asp.net formview

我需要在插入新项目后进入编辑模式。

OnItemInserted 方法:

protected void fvReport_ItemInserted(Object sender, FormViewInsertedEventArgs e)
    {
        if (e.Exception == null)
        {
            if (Session["id"] != null)
            {
                ObjectReport.SelectParameters["id"].DefaultValue = Session["id"].ToString();
            }
            fvReport.ChangeMode(FormViewMode.ReadOnly);
        }
    }

对象数据源:

<asp:ObjectDataSource ID="ObjectReport" runat="server"
     TypeName = "ObjectDataSources.CS.ConnectionToDB"
     SelectMethod = "GetReportById" InsertMethod="InsertReport" OnInserted="ObjectReport_Inserted">
     <SelectParameters>
          <asp:Parameter Name="id" Type = "Int32" />
     </SelectParameters>
     <InsertParameters>
          <asp:Parameter Name="id" Type="Int32" Direction="Output" />
          <asp:Parameter Name="report_name" Type="String" />
          <asp:Parameter Name="customer" Type="String" ConvertEmptyStringToNull="true" />
          <asp:Parameter Name="assignment" Type="String" ConvertEmptyStringToNull="true" />
          <asp:Parameter Name="report_type" Type="String" ConvertEmptyStringToNull="true" />
          <asp:Parameter Name="system" Type="String" ConvertEmptyStringToNull="true" />
          <asp:Parameter Name="setting" Type="String" ConvertEmptyStringToNull="true" />
     </InsertParameters>
</asp:ObjectDataSource>

protected void ObjectReport_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
{
    Session["id"] = e.OutputParameters["id"].ToString();
}

插入方法:

public void InsertReport(out int id, string report_name, 
   string customer, string assignment, 
   string report_type, string system, string setting)
{
   SqlConnection conn = new SqlConnection(_connectionString);
   SqlCommand cmd = new SqlCommand("INSERT INTO main_report ("report_name,customer,assignment,report_type, " +
   "system,setting) VALUES ("@report_name,@customer,@assignment, " +
   "@report_type,@system,@setting); " +
   "SELECT @id = SCOPE_IDENTITY() ", conn);
   cmd.Parameters.Add("@report_name", SqlDbType.VarChar, 255).Value = report_name;
   cmd.Parameters.Add("@customer", SqlDbType.VarChar, 255).Value = customer;
   cmd.Parameters.Add("@assignment", SqlDbType.VarChar, 255).Value = assignment;
   cmd.Parameters.Add("@report_type", SqlDbType.VarChar, 50).Value = report_type;
   cmd.Parameters.Add("@system", SqlDbType.VarChar, 3).Value = system;
   cmd.Parameters.Add("@setting", SqlDbType.VarChar, 255).Value = setting;
   SqlParameter p = cmd.Parameters.Add("@id", SqlDbType.Int);
   p.Direction = ParameterDirection.Output;
   id = 0;
   conn.Open();
   cmd.ExecuteNonQuery();
   id = (int)p.Value;
   conn.Close();

当我尝试插入时,我收到下一个异常:

Session["id"] = e.OutputParameters["id"].ToString(); -  Object reference not set to an instance of an object.

为什么输出参数为空?我做错了什么?

最佳答案

您可以从您的方法中返回值并可以像...一样访问它

public Int InsertReport(............)
{
....
....
return Id
}

然后在插入的函数中,可以通过e.ReturnValue访问它

Session["id"] = Convert.ToString(e.ReturnValue);

关于c# - 在 FormView 中插入后获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792899/

相关文章:

c# - 空(非空)对象检测

c# - 在 LINQ 中重新排序记录

c# - 使用简单注入(inject)器解析通用装饰器

asp.net - 如何在响应重定向之前调用 javascript

javascript - 如何处理大的下拉列表?

c# - 如何在 Windows Phone 8.1 中使用 ThemeResources 更改主题?

java - Java中使用API​​ HtmlUnit登录并获取网页

c# - ASP.NET Web API Post 方法错误

python - formview odoo 10 中按钮中的名称 ="135"是什么意思

asp.net - 如何防止asp :FormView from rendering as a table?