.net objectdatasource insertparameter值

.net objectdatasource insertparameter值,.net,parameters,objectdatasource,.net,Parameters,Objectdatasource,我有一个带有此代码的页面prueba.aspx protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { try { Object ob = CPUSControl1.FindControl("ObjectDataSourcecpus"); ObjectDataSource ods = (ob != nul

我有一个带有此代码的页面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是此页面中的一个usercontrol,它的find ok,objectdatasource如果find ok也是。即使取消选择的参数也可以正常工作,但我添加的insertparameter不起作用。我试图一步一步地更改名称、调试和编辑,insertparameters始终采用默认值(0) objectdatasource是这样的

<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(); 为什么? 我猜这是因为我从未添加insertparameters,但我猜不出原因。
提前谢谢。请原谅我的英语不好

试试这样:

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;
   }
}
对代码的更改:

  • 如果您不打算对异常执行任何操作,请不要捕获异常。(如果必须重新抛出异常,请使用
    throw;
    而不是
    throw error;
    来保留堆栈跟踪。)

  • 用于引用类型的条件转换-它比调用
    .GetType()
    并将结果与特定类型进行比较更有效

  • SelectedValue
    属性已经是一个
    字符串
    -无需对其调用
    .ToString()

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

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


编辑:
InsertParameters
集合不会在
ViewState
中存储更改,因此回发时会丢失该值。最简单的解决方案可能是使用
插入
事件来设置参数值:

主页(代码隐藏):

用户控制:


听起来你想要一个-不需要自定义代码!你好,理查德,谢谢你的回复。我尝试使用ControlParameter,但dropdownlist位于包含usercontrol的页面中。因此,我无法从usercontrol中的objectdatasource指向它。另外,我认为从usercontrol指向主页面是一个相当大的问题。我在usercontrol中添加了两个标签,并将其放入pageload保护的空页加载(object sender,EventArgs e){Label2.Text=ObjectDataSourcecpus.InsertParameters[“Usario”].DefaultValue.ToString();Label3.Text=ObjectDataSourcecpus.SelectParameters[“usuario”].DefaultValue.ToString();}SelectParameters填充标签ok,insertparameters从不填充标签。因此,我在设置de insertparameters之后添加了一个断点,“usuario”仍然为0,好像我无法更改它。我发现有很多人这样做的例子。。。我真的不明白…谢谢你的回答!我已经复制并粘贴了这个,感谢现在我得到了错误CPU“”不包含名为“usuario”的属性。现在,请告诉我,我不能用user selectparameters和insertparameters将变量传递给CPU类的get或save方法吗?@llocani:听起来你好像在试图使用usercontrol中的某个地方。您不需要这样做,因为您已经设置了参数的
DefaultValue
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;
}