2011-10-23 26 views
2

我想使用ObjectDatasource从文本框中插入数据。 ObjectDataSource绑定到一个gridview,但只显示某些计算列。文本框用于输入所有基本输入。 ObjectDatasource删除&选择命令(GridView上的链接按钮)正在工作。不过,我在插入命令时遇到了问题。我无法弄清楚如何将文本框中的数据作为参数传递给ObjectDataSource插入ObjectDatasource传递参数

编辑:使用下面的代码,正在插入一条记录。参数正在通过。 odssMain.Insert()给出错误:“未将对象引用设置为对象的实例”。 编辑:为什么我得到这个错误?

此外,ObjectDataSource一直很奇怪。发生错误后,我必须在ODS向导中再次重新配置插入方法,因为该方法将为空。

ASP.NET 3.5 & SQL 2008,VS 2008

这里是我的代码:

<asp:ObjectDataSource ID="odsMain" runat="server" 
    SelectMethod="SelectMain" DeleteMethod="DeleteMain" 
    InsertMethod="InsertMain" UpdateMethod="UpdateMain" 
    OldValuesParameterFormatString="original_{0}" TypeName="MainDB" > 
....... 
    <InsertParameters> 
     <asp:Parameter Name="Quantity" Type="Int32" /> 
    </InsertParameters> 
DAL FILE: 
[DataObjectMethod(DataObjectMethodType.Insert)] 
public static int InsertMain(int Quantity)/ 
{ 
    SqlConnection con = new SqlConnection(GetConnectionString()); 

    string strQuery = "INSERT INTO t_Main (Quantity) VALUES (@Quantity)"; 
    SqlCommand cmd = new SqlCommand(strQuery, con); 
    cmd.Parameters.AddWithValue("@Quantity", Quantity); 

    con.Open(); 
    int i = cmd.ExecuteNonQuery(); 
    con.Close(); 

    return i; 
} 

CODE BEHIND FILE: 
protected void btnSaveAnalysis_Click(object sender, EventArgs e) 
{ 
    odsMain.InsertParameters.Clear(); 

    //Store parameters with values to the collection 
    odsMain.InsertParameters.Add(new Parameter ("Quantity", TypeCode.Int32, iQuantity.ToString())); 

    //Diferent ways that I tried. Still not working 
    //odsMain.InsertParameters.Add("Quantity", iQuantity.ToString()); 
    //odsMain.InsertParameters["Quantity"].DefaultValue = iQuantity.ToString(); 

    odsMain.Insert(); 

} 

回答

2

你可以尝试这样的....

ObjectDataSource控件用于InsertParameter看起来像一个下方

<InsertParameters> 
<asp:Parameter Name="FirstName" /> 
<asp:Parameter Name="MiddleName" /> 
<asp:Parameter Name="LastName" /> 
<asp:Parameter Name="Desgination" /> 
<asp:Parameter Name="Address" /> 
<asp:Parameter Name="City" /> 
<asp:Parameter Name="State" /> 
<asp:Parameter Name="Country" /> 
</InsertParameters> 

我也将通过InsertMethod本身ObjectDataSource的类型,它有一个InsertCustomer方法。

InsertCustomer方法看起来像下面的一个: -

public void InsertCustomer(string FirstName, string MiddleName,string LastName, string Desgination, string Address, string City, string State, string Country) 
    { 

    SqlConnection con = new SqlConnection(conStr); 
    SqlCommand cmd = new SqlCommand("InsertCustomer", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

//这个检查是必要的,当u不传递任何价值,因为它会通过为[默认],并给错误

if (string.IsNullOrEmpty(FirstName)) 
     FirstName = string.Empty; 
    if (string.IsNullOrEmpty(LastName)) 
     LastName = string.Empty; 
    if (string.IsNullOrEmpty(MiddleName)) 
     MiddleName = string.Empty; 

    if (string.IsNullOrEmpty(Desgination)) 
     Desgination = string.Empty; 

    if (string.IsNullOrEmpty(Address)) 
     Address = string.Empty; 

    if (string.IsNullOrEmpty(City)) 
     City = string.Empty; 

    if (string.IsNullOrEmpty(State)) 
     State = string.Empty; 

    if (string.IsNullOrEmpty(Country)) 
     Country = string.Empty; 

    cmd.Parameters.AddWithValue("@IV_FirstName", FirstName); 
    cmd.Parameters.AddWithValue("@IV_LastName", LastName); 
    cmd.Parameters.AddWithValue("@IV_MiddleName", MiddleName); 
    cmd.Parameters.AddWithValue("@IV_Desgination", Desgination); 
    cmd.Parameters.AddWithValue("@IV_Address", Address); 
    cmd.Parameters.AddWithValue("@IV_City", City); 
    cmd.Parameters.AddWithValue("@IV_State", State); 
    cmd.Parameters.AddWithValue("@IV_Country", Country); 
    using (con) 
    { 

     con.Open(); 
     cmd.ExecuteNonQuery(); 

    } 

    } 

Button保存插入记录。

//插入记录保存按钮

protected void btnSave_Click(object sender, EventArgs e) 
{ 

    Customer.InsertParameters["FirstName"].DefaultValue = GetGridTextBoxValue("txtFirstName"); 
    Customer.InsertParameters["MiddleName"].DefaultValue = GetGridTextBoxValue("txtMiddleName"); 
    Customer.InsertParameters["LastName"].DefaultValue = GetGridTextBoxValue("txtLastName"); 
    Customer.InsertParameters["Desgination"].DefaultValue= GetGridTextBoxValue("txtDesgination"); 
    Customer.InsertParameters["Address"].DefaultValue = GetGridTextBoxValue("txtAddress"); 
    Customer.InsertParameters["City"].DefaultValue = GetGridTextBoxValue("txtCity"); 
    Customer.InsertParameters["State"].DefaultValue = GetGridTextBoxValue("txtState"); 
    Customer.InsertParameters["Country"].DefaultValue = GetGridTextBoxValue("txtCountry"); 
    Customer.Insert(); 

} 

GetGridTextBoxValue功能将得到来自各个栏尾行文本框的文本值。

//获取的GridView的页脚行

public string GetGridTextBoxValue(string txtID) 
{ 
    try 
    { 
     TextBox txt = (TextBox)gvCustomer.FooterRow.FindControl(txtID); // here you can place any text box value on your design page 
     return txt.Text; 

    } 

    catch (Exception ex) 
    { 
     return string.Empty; 
     throw ex; 
    } 

} 

文本框的值,结果图像enter image description here是这样的...

+0

是的,我没有看到类似这样的例子。 – user450143

+0

但是,Customer.InsertParameters [“FirstName”]。DefaultValue = strFirstName行给我一个运行时错误。 – user450143