2011-10-23 12 views
2

ObjectDatasourceを使用してテキストボックスからデータを挿入したいとします。 ObjectDataSourceはグリッドビューにバインドされていますが、特定の計算列のみを表示します。テキストボックスは、すべての基本入力を入力するために使用されます。 ObjectDatasource Delete &選択コマンド(グリッドビューのリンクボタン)が機能しています。しかし、私はInsertコマンドに問題があります。私はObjectDataSourceの挿入にパラメータとしてテキストボックスからデータを渡す方法を把握できませんObjectDatasource渡すパラメータ

EDIT:以下のコードでは、レコードが挿入されています。パラメータが渡されています。 odssMain.Insert()は、エラー: "オブジェクト参照がオブジェクトのインスタンスに設定されていません"を返します。 編集:このエラーはなぜ発生しますか?

また、ObjectDataSourceは奇妙な動作をしています。エラーが発生したら、メソッドが空白になるため、ODSウィザードでInsertメソッドを再設定する必要があります。

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

あなたは、このように試みることができる.... InsertParameterため

のObjectDataSourceは、1以下のようになります。

<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 InsertCustomerメソッドを持つObjectDataSourceのty。

InsertCustomer方法は、1以下のようになります -

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(); 

    } 

    } 
を与える場合は、このチェックが必要であり、

ボタンレコードを挿入するために保存します。

//レコードの保存]ボタンを

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機能を挿入し、各列のフッター行からのTextBoxのテキスト値を取得します。

//は、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

関連する問題