2013-06-16 3 views
-4

что когда-либо я выбираю любое имя, доступное в поле со списком, оно должно отображаться в текстовом поле. Я м новичок пожалуйста Просьба помочь мне решитьНевозможно неявно преобразовать тип 'string' в 'int'?

public class product 
{ 
    public int proid { set; get; } 
    public string prodname { set; get; } 
    public int unitprice { set; get; } 

} 
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)   
{ 
    SqlConnection con = new SqlConnection(@"server=xxxx-PC; database= sample; integrated security= true"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("select * from tblproduct ", con); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    product prod = new product(); 
    while(dr.read()) 
    { 
     prod.proid = dr[0].ToString(); 
     prod.prodname = dr[1].ToString(); 
     prod.unitprice = dr[2].ToString(); 
     textBox2.Text = proid; 
     textBox3.Text = prodname; 
     textBox4.Text = unitprice; 
    } 
} 

с ошибкой:

Error : The name 'prodname' does not exist in the current context 
Error : Cannot implicitly convert type 'string' to 'int'`improved formatting` 
+0

должен быть textBox3.Text = prod.prodname; –

+1

Серьезно? Ответ Google занимает две секунды .... здесь я сделаю это для вас ... https://www.google.com/search?q=convert+string+to+int+c%23&oq=convert + string + to + & aqs = chrome.3.57j0j5j0j62j60.6910j0 & sourceid = chrome & ie = UTF-8 – Dom

+0

yes error очищен для prodname спасибо. любезно сообщите мне о продиде и цене.это поможет мне – pooja

ответ

0

Вы должны явно преобразовать строку в междунар:

int i; 

bool succeeded = int.TryParse(string, out i); 
0

Вы объявляете продукта как

public class product 
    { 
     public int proid { set; get; } //Integer 
     public string prodname { set; get; } 
     public int unitprice { set; get; } 
    } 

и присвоение ему строки prod.proid = dr[0].ToString();

Во-вторых, оператор textBox2.Text = proid; имеет ошибку в некоторых случаях. например null или другое форматирование. Вы можете использовать TryParse() для него, как показано ниже:

int productId = 0; 
Int.TryParse(string, out productId) 
textBox2.Text =productId.ToString() ; 
1

Вопрос заключается в том, что вы пытаетесь установить String ценность для Int32 собственности без явного приведения или преобразования, а не неявное приведение не определен:

// ... 
public int proid { set; get; } 
// ... 

// ... 
prod.prodid = dr[0].ToString(); 
// ... 

в зависимости от фактического типа dr[0], вы могли бы возможно использовать GetInt32() и подобные методы вместо этого indexer и .ToString():

prod.proid = dr.GetInt32(0); 

Хотя, если столбец обнуляемый в SQL, вам необходимо проверить на NULL с с IsDbNull() и обеспечивают восстановительную стоимость:

prod.proid = dr.IsDbNull(0) ? default(int) : dr.GetInt32(0); 

Значение по умолчанию может быть только null соответствовать SQL, если class "свойства изменяются в int?:

public int? proid { set; get; } 

или укажите бросание или преобразование отдельно:

prod.proid = Convert.ToInt32(dr[0].ToString()); 

Но, так как цель, кажется, чтобы обновить текстовые поля, вы можете пропустить объезд с product, соответствующие значения String с String свойством:

textBox2.Text = dr[0].ToString(); 
+0

while (dr.Read()) { produ prod = new produ(); prod.proid = dr.GetInt32 (0); prod.unitprice = Convert.ToInt32 (dr [2]); prod.prodname = dr [1] .ToString(); textBox3.Text = prod.prodname; textBox2.Text = dr [0] .ToString(); textBox4.Text = prod.unitprice.ToString(); } Указанный состав недействителен рядом с prod.proid = dr.GetInt32 (0); – pooja

+0

no its not null.it содержит некоторые значения id – pooja

+0

@pooja Какой тип SQL является столбцом для 'dr [0]'? Если это ['INT'] (http://msdn.microsoft.com/en-us/library/ms187745.aspx) и не содержит значений' NULL' (в любых строках), 'GetInt32()' не должно быть проблем с кастингом. Примечание. Вы также должны сопоставлять размер байта - 'INT' с' GetInt32() ',' BIGINT' с ['GetInt64()'] (http://msdn.microsoft.com/en-us/library/ system.data.sqlclient.sqldatareader.getint64.aspx) и 'long',' TINYINT' с ['GetByte()'] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient .sqldatareader.getbyte.aspx) и т. д. –

-1
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 

{ 
      SqlConnection con = new SqlConnection(@"server=xxxx-PC; database= sample;  integrated security= true"); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("select * from tblproduct ", con); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      product prod = new product(); 

      // need to convert to integer, coz prodid is int 
      prod.proid = Convert.ToInt32(dr[0].ToString()); 
      prod.prodname = dr[1].ToString(); 
      prod.unitprice = Convert.ToInt32(dr[2].ToString()); 

      // need to convert to string, textbox gets only string type 
      // prod... => object_name.member_name 
      textBox2.Text = prod.proid.ToString(); 

      // or u can u do: ..= prod.prodid+""; => this convert to str automatically    
      textBox3.Text = prod.prodname.ToString(); 
      textBox4.Text = prod.unitprice.ToString(); 
} 
+0

спасибо, но я получаю ошибку в качестве входного сигнала не в правильном формате около prod.proid = Convert.ToInt32 (dr [0] .ToString()); – pooja