PDA

View Full Version : مشکل همیشگی ComboBox



babak23
چهارشنبه 28 شهریور 1386, 14:28 عصر
:متفکر:سلان دوستان
من به یه مشکل برخوردم البته تایپیک ها قبلی را ( در این زمینه ) جستجو کردم اما چیزی دسگیرم نشد.

من تو برنامم اطلاعات رشته ای ( به صورت فارسی ) یه فیلد از یه بانک را به کامبا باکس وصل کردم

مشکل من
AutoCompleteSource هست (به ظاهر ساده است اما حسابی وقتم را گرفته )

مشکل اینجاست که
AutoCompleteSource با فیلد های متنی من کار نمیکنه و نمی تونه رشته را پیدا کنه
اینم سورس برنامه



privatevoid combox(SqlConnection objConnection)
{
SqlDataAdapter adapter = newSqlDataAdapter("select n_vahed as Information ,Code from sabt", objConnection);
DataTable objdataTable = newDataTable();
adapter.Fill(objdataTable);
objConnection.Open();
comboBox2.DataSource = objdataTable;
comboBox2.DisplayMember = "Information";
comboBox2.ValueMember = "Code";
this.comboBox2.AutoCompleteSource = AutoCompleteSource.ListItems;
this.comboBox2.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
objConnection.Close();
}


بانک اطلاعاتی من اسکول 2000 هست
ممنون میشم راهنمایم کنید.....:عصبانی++:

PC2st
چهارشنبه 28 شهریور 1386, 16:35 عصر
بنظر کدها درسته! (راستی نیازی به Open و Close کردن connection نیست)
فیلد n_vahed چه مقادیری رو در خودش ذخیره کرده؟

babak23
پنج شنبه 29 شهریور 1386, 07:45 صبح
نام واحد(n_vahed) از نوع رشته ای هست
تو همین بانک یک فیلد ار نوع عددی دارم که با همین سورس کار میکنه اما فیلد های متنی
بانک را نمتونه پیدا کنه
اگه کسی میتونه راهنمایی کنه ممنون میشم

PC2st
پنج شنبه 29 شهریور 1386, 17:06 عصر
ببخشید منظور من نوع مقادیر نبود، خود مقادیر بود... "فیلد n_vahed چه مقادیری رو در خودش ذخیره کرده؟"
ممکنه بخاطر یونیکد مقادیری باشه که در ComboBox تایپ میکنید و همخوانی نداشته باشه، پس با رکوردی مطابقت نداره و لیست SuggestAppend به نمایش در نمیاد. البته این در حد یک نظر است،...
اگر بتونید یک نمونه خیلی خیلی کوچک از بانک رو ضمیمه کنید، تا من و دسوتان بیشتر در جریان کار قرار بگیریم؟

babak23
یک شنبه 01 مهر 1386, 15:09 عصر
به نظر مشکل از یونیکد هست.

چون من وقتی اطلاعات را به طور مستقیم وارد بانک میکنم خاصیت سرچ کار میکنه اما
وقتی از برنامه اطلاعات را وارد میکنم توانایی سرچ نداره

نیازمند کمک شما دوستان هستیم:ناراحت:

PC2st
یک شنبه 01 مهر 1386, 18:18 عصر
وقتی از برنامه اطلاعات را وارد میکنم توانایی سرچ نداره
از طریق برنامه اطلاعات را به منبع داده (DataTable) میدید یا اینکه مستقیما در دیتابیس وارد میکنید؟ شاید اصلا اطلاعات در منبع داده قرار نمیگیرند؟

Smart User
یک شنبه 01 مهر 1386, 18:55 عصر
سلام
منم به این مشکل برخوردم

اول vluemember رو خالی کنید.
بعد هم خاصیت FormattingEnabled = true رو true کنید.

اگه جواب داد دوباره valuemember رو مقدار بدهید.
من خودم به همچین مشکلی برخوردم و با true کردن این خاصیت درست شد.

موفق باشید.

babak23
سه شنبه 03 مهر 1386, 12:24 عصر
میدید یا اینکه مستقیما در دیتابیس وارد میکنید؟ شاید اصلا اطلاعات در منبع داده قرار نمیگیرند؟


چرا اطلاعا تو بانک ذخیره میشه(از طریق برنامه )
موقعی که به صورت مستقیم اطلاعات را وارد بانک میکنم توانایی سرج داره و یا مستقیم یه متنی را تو برنامه مینویسم و به بانک اضافه میکنم
مشکل از ورودی فرم هست وقتی متنی را از تکس باکس میگیرم و تو بانک ذخیره میکنم توانایی سرچ نداره

babak23
سه شنبه 03 مهر 1386, 12:26 عصر
سلام
منم به این مشکل برخوردم

اول vluemember رو خالی کنید.
بعد هم خاصیت FormattingEnabled = true رو true کنید.

اگه جواب داد دوباره valuemember رو مقدار بدهید.
من خودم به همچین مشکلی برخوردم و با true کردن این خاصیت درست شد.

موفق باشید.

این کار را کردم اما جواب نداد جالب اینجاست که این مشکل دراسکول 2005 ایجاد نمیشه

PC2st
سه شنبه 03 مهر 1386, 15:15 عصر
چرا اطلاعا تو بانک ذخیره میشه(از طریق برنامه )
میخوام ببینم درست متوجه شدم:"رکوردهایی که از طریق برنامه در بانک اطلاعاتی ذخیره میکنید، توسط خاصیت AutoCompleteMode از کنترل ComboBox قابل نمایش نیست!" درسته؟
پس به این نتیجه رسیدیم که داده ها به درستی در بانک ذخیره نمیشه (البته از طریق برنامه).
پس میشه دستوراتی که باهاش بانک اطلاعاتی رو ذخیره میکنید رو بنویسید؟
چونکه ممکنه نوع داده ها رو مثلا بصورت Nvarchar ذخیره نکنید و بصورت Varchar ذخیره بشه! اگر از خاصیت Parameters برای اپدیت کردن استفاده میکنید، نوع داده رو حتما Nchar یا Nvarchar بگذارید در غیر اینصورت داده ها بصورت علامت ؟ ذخیره میشه.

babak23
چهارشنبه 04 مهر 1386, 07:54 صبح
SqlConnection objConnection = newSqlConnection("Data Source=PROGAMER;Initial Catalog=MOJAVEZ;Integrated Security=True");

privatevoid Combox(SqlConnection objConnection)
{

SqlDataAdapter adapter = newSqlDataAdapter("select n_vahed as Information ,Code from sabt", objConnection);
DataTable objdataTable = newDataTable();
adapter.Fill(objdataTable);

comboBox2.DataSource = objdataTable;
comboBox2.DisplayMember = "Information";
comboBox2.ValueMember = "Code";
comboBox2.AutoCompleteSource = AutoCompleteSource.ListItems;
comboBox2.AutoCompleteMode = AutoCompleteMode.SuggestAppend;

}
privatevoid Form1_Load(object sender, EventArgs e)
{
Combox(objConnection);

}
privatevoid button1_Click(object sender, EventArgs e)
{
SqlDataAdapter objDataAdapter = newSqlDataAdapter();
DataSet objDataSet = newDataSet();
int code = int.Parse(maskedTextBox1.Text.Trim());
string n_vahed = textBox2.Text.Trim();
SqlCommand objCommand = newSqlCommand();
objCommand.Connection = objConnection;
objCommand.CommandText = "INSERT INTO sabt " + "(code , n_vahed ) " + "VALUES(' " + code + " ' , ' " + n_vahed + " ' )";
objCommand.CommandType = CommandType.Text;
objConnection.Open();
try
{
objCommand.ExecuteNonQuery();
MessageBox.Show("ذخیره اطلاعات با موفقیت انجام شد", "ذخیره اطلاعات", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("عدم ارتباط با بانک اطلاعتی , رکوردی با این شماره و اندیس وجود دارد", "خطا در ذخیره اطلاعات", MessageBoxButtons.OK, MessageBoxIcon.Error);


}
objConnection.Close();
Combox(objConnection);



متغیر نام واحد از نوع varchar هست

حالا تو همین برنامه اگه دستور insert را به این صورت بنویسم از بانک به راحتی میتونه سرچ کنه و کلمه myproject را که تو تو فیلد n_vahed ذخیره شده را پیدا می کنه!؟


objCommand.CommandText = "INSERT INTO sabt " + "(code , n_vahed ) " + "VALUES('123' , 'myproject' )";

PC2st
چهارشنبه 04 مهر 1386, 16:47 عصر
من فکر میکردم که داده ها فارسی هستند :-)
بر اساس اینکه گفتید که اگر INSERT رو بدون متغیرهای code و n_vahed انجام بدید، عملیات درست کار میکنه پس ایراد میتونه از متغیرهای code و n_vahed باشه که داده ها بدرستی در این متغیرها قرار نمیگیرند.

babak23
پنج شنبه 05 مهر 1386, 07:54 صبح
من فکر میکردم که داده ها فارسی هستند :-)
بر اساس اینکه گفتید که اگر INSERT رو بدون متغیرهای code و n_vahed انجام بدید، عملیات درست کار میکنه پس ایراد میتونه از متغیرهای code و n_vahed باشه که داده ها بدرستی در این متغیرها قرار نمیگیرند.

ضمن تشکر از دوست عزیز PC2st.ir
لازم به یاداوری هست که داده ها تو بانک به درستی ذخیره میشن هیچ مشکلی وجود نداره
تنها مشکل توانایی سرچ هست که من تو پایین به صورت کامل توضیح دادم
(نوع n_vahed تو اسکول از نوع nvarchar تعریف شده )

من مقدار نام واحد (n_vahed) را به این صورت از ورودی فرم میگیرم



string n_vahed = textBox2.Text.Trim();


که توانی سرچ نداره

حالا اگه داده را به این صورت بگیرم مشکل حل میشه


string n_vahed ="myproject";


با توجه به این مطالب من باید چه کاری انجام بدم که توانایی سرچ فعال بشه؟
در حالی که به نظر مشکل از


string n_vahed = textBox2.Text.Trim();

میتونه باشه که نوع تبدیل محتوایی تکست که داخل متعقیر نام واحد ذخیره میشه مشکل ساز شده

PC2st
پنج شنبه 05 مهر 1386, 13:20 عصر
میتونه باشه که نوع تبدیل محتوایی تکست که داخل متعقیر نام واحد ذخیره میشه مشکل ساز شده
بله منظور من هم همین بود که مشکل از متغیر n_vahed یا code میتونه باشه.
در واقع خودتون مشکل رو پیدا کردید که مقدار متغیر n_vahed غیر از آن چیزی است که انتظارش رو داشته بودید. پس برای اینکه متوجه بشیم چه مشکلی در قرار گیری داده در متغیر n_vahed وجود داره، بعد از اینکه این متغیر رو مقدار دهی کردید، آنرا به نمایش بگذارید یا اینکه از debug استفاده کنید... بهرحال بجای debug، اون رو نمایش میدیم، مثلا مثل زیر:


int code = int.Parse(maskedTextBox1.Text.Trim());
string n_vahed = textBox2.Text.Trim();
MessageBox.Show(code.ToString());
MessageBox.Show(n_vahed);

ببینید که مقادیر این دو متغیر، همان چیزی است که انتظارش رو دارید؟ بعبارتی ببینید که چه متنی در message box ها نمایش داده میشه، آیا متن message box دوم بصورت زیر است؟


myproject

بعنوان مثال اگر نبود، پس مشکل در مقدار موجود در متغیر است.
بهرحال ممکنه کارکترهای مخفی هم در متغیر n_vahed وجود داشته باشه، برای آگاهی از وجود کاراکترهای مخفی، کد زیر را هم بعد از کدهای فوق قرار دهید:


MessageBox.Show(n_vahed.Length.ToString());

آیا مقدار عدد نمایش داده شده توسط کد فوق، با تعداد کاراکترهای موجود در متغیر n_vahed برابر است؟ اگر برابر نبود یعنی اینکه کاراکتر مخفی باعث بوجود آمدن این مشکل شده.

بهرحال بهتره اول مطمئن بشیم که ایراد از قرار گرفتن داده در متغیر n_vahed (یا حتی متغیر code) است.