0

我有一个带有此代码的页面 prueba.aspx

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {

            Object ob = CPUSControl1.FindControl("ObjectDataSourcecpus");
            ObjectDataSource ods = (ob != null && ob.GetType() == typeof(ObjectDataSource)) ? (ObjectDataSource)ob : null;
            if (ods != null)
            {
                ods.SelectParameters.Clear();
                ods.SelectParameters.Add("usuario", DropDownListUsuarios.SelectedValue.ToString().Trim());
                ods.InsertParameters.Add("usuario", DropDownListUsuarios.SelectedValue.ToString().Trim());
            }
        }
        catch (Exception error)
        {
            throw error;
        }


    }

CPUSControl1 是这个页面中的一个用户控件,它找到了,objectdatasource 如果找到了也可以。即使 de selectedparameters 工作正常,但我添加的 insertparameter 不起作用。我尝试更改名称,逐步调试,并且插入参数始终采用默认值(0)对象数据源是这个

<asp:ObjectDataSource ID="ObjectDataSourcecpus" runat="server" 
    SelectMethod="getCPUs" TypeName="CPU" InsertMethod="saveCPUs">
    <SelectParameters>
        <asp:Parameter Name="usuario" DefaultValue="0" Type="String" />
    </SelectParameters>
    <InsertParameters>
        <asp:Parameter Name="usuario" DefaultValue="0" Type="String" />
        <asp:Parameter Name="Codigo" Type="String" />
        <asp:Parameter Name="NroSerie" Type="String" />
        <asp:Parameter Name="TipoCPU" Type="String" />
        <asp:Parameter Name="Mother" Type="String" />
        <asp:Parameter Name="Modelo" Type="String" />
        <asp:Parameter Name="Procesador" Type="String" />
        <asp:Parameter Name="Memoria" Type="String" />
        <asp:Parameter Name="Proveedor" Type="Int32" />
        <asp:Parameter Name="BocaRed" Type="String" />
        <asp:Parameter Name="IP" Type="String" />
        <asp:Parameter Name="UPS" Type="Int32" />
        <asp:Parameter Name="VtoGarantia" Type="DateTime" />
        <asp:Parameter Name="FechaCompra" Type="DateTime" />
        <asp:Parameter Name="NombreEquipo" Type="String" />
        <asp:Parameter Name="USB" Type="String" />
        <asp:Parameter Name="Obs" Type="String" />
        <asp:Parameter Name="Marcacion" Type="String" />
        <asp:Parameter Name="TipoCPU1" Type="Int32" />
        <asp:Parameter Name="fechaentrada" Type="DateTime" />
        <asp:Parameter Name="fechasalida" Type="DateTime" />
    </InsertParameters>
</asp:ObjectDataSource>

我有义务添加 ods.SelectParameters.Clear(); 但不是 ods.InsertedParameters.Clear(); 为什么?我想这是因为我从不添加插入参数,但你猜不出原因。提前致谢。原谅我糟糕的英语

4

1 回答 1

0

尝试这样的事情:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   ObjectDataSource ods = CPUSControl1.FindControl("ObjectDataSourcecpus") as ObjectDataSource;
   if (ods != null)
   {
      string value = DropDownListUsuarios.SelectedValue.Trim();
      ods.SelectParameters["usuario"].DefaultValue = value;
      ods.InsertParameters["usuario"].DefaultValue = value;
   }
}

更改您的代码:

  • Exception如果您不打算对它做任何事情,请不要抓住它。(如果您必须重新抛出异常,请使用throw;而不是throw error;保留堆栈跟踪。)

  • 使用运算符as引用类型进行条件转换 - 它比调用.GetType()并将结果与​​特定类型进行比较更有效。

  • SelectedValue属性已经是string- 没有必要调用.ToString()它。

  • 调用.Trim()创建一个新字符串;最好将结果缓存在局部变量中并重用它。

  • 您已经通过标记将参数添加到SelectParametersand集合中。InsertParameters您只需要检索现有Parameter对象并设置其DefaultValue属性。


编辑:
InsertParameters集合不存储更改ViewState,因此您将失去回发的价值。最简单的解决方案大概是使用Inserting事件来设置参数值:

主页(代码隐藏):

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   CPUSControl1.Usuario = DropDownListUsuarios.SelectedValue.Trim();
}

用户控制:

<asp:ObjectDataSource ID="ObjectDataSourcecpus" runat="server" 
   SelectMethod="getCPUs" TypeName="CPU" InsertMethod="saveCPUs"
   OnSelecting="DataSourceCallingMethod"
   OnInserting="DataSourceCallingMethod"
   OnUpdating="DataSourceCallingMethod"
   OnDeleting="DataSourceCallingMethod"
>
...

*用户控制(代码隐藏):

public string Usuario
{
   get { return (string)ViewState["Usuario"]; }
   set { ViewState["Usuario"] = value; }
}

protected void DataSourceCallingMethod(object sender, ObjectDataSourceMethodEventArgs e)
{
   e.InputParameters["usuario"] = Usuario;
}
于 2013-11-05T19:22:06.383 回答