Параметры передачи ObjectDataSource

#asp.net-3.5

#asp.net-3.5

Вопрос:

Я хочу вставить данные из текстовых полей, используя ObjectDataSource. ObjectDataSource привязан к gridview, но отображает только определенные вычисляемые столбцы. Текстовые поля используются для ввода всех основных входных данных. Команды удаления и выбора ObjectDataSource (кнопки ссылок в gridview) работают. Однако у меня возникли проблемы с командой Insert. Я не могу понять, как передать данные из текстовых полей в качестве параметров для вставки ObjectDataSource

РЕДАКТИРОВАТЬ: с помощью приведенного ниже кода вставляется запись. Параметры передаются. odssMain.Insert() выдает ошибку: «Ссылка на объект не установлена для экземпляра объекта». РЕДАКТИРОВАТЬ: ПОЧЕМУ Я ПОЛУЧАЮ ЭТУ ОШИБКУ?

Кроме того, ObjectDataSource ведет себя странно. После ошибки я должен снова перенастроить метод вставки в мастере ODS, поскольку метод будет пустым.

ASP.NET 3.5 и SQL 2008, ПРОТИВ 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();

}
  

Ответ №1:

вы могли бы попробовать так….

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;
  

//эта проверка необходима, когда вы не передаете никакого значения, поскольку оно будет передано как [по умолчанию] и выдаст ошибку

     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 получит текстовое значение текстового поля из строки нижнего колонтитула соответствующего столбца.

//Получить значение текстового поля строки нижнего колонтитула 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;  
    }  

}
  

и изображение результатов введите описание изображения здесьвыглядит следующим образом …

Комментарии:

1. Да, я видел пример, похожий на этот.

2. Однако строка Customer. InsertParameters[«FirstName»] . defaultValue = strFirstName выдавало ошибку времени выполнения.