با سلام
چطور میتونم بجای قرار دادن 1 ستون از جدول بانک،2 ستون از آن رو در یک کامبو باکس نمایش بدم.و همچنین وقتی که یک سطر انتخاب شد وقتی که در بانک ذخیره کردیم.کد آن ذخیره شود.
با سلام
چطور میتونم بجای قرار دادن 1 ستون از جدول بانک،2 ستون از آن رو در یک کامبو باکس نمایش بدم.و همچنین وقتی که یک سطر انتخاب شد وقتی که در بانک ذخیره کردیم.کد آن ذخیره شود.
آخرین ویرایش به وسیله salargham : چهارشنبه 16 اسفند 1391 در 07:11 صبح
سلام.
در دستور sql ای که مینویسید اون دو فیلد رو با هم جمع بزنید.
select FirstName + ' ' + LastName from TblPerson
حالا راحت میتونید همزمان نام و نام خانوادگی رو درون کمبو نمایش بدید.
موفق باشید.
ممنونم
ولی به این صورت نمی خوام باشه.دقیقا مثل تصویر بالا باشه.
فکر نمیکنم چیزی که شما میخوای رو بشه با یک کمبو پیاده سازی کرد. معمولا متن رو نمایش میدن (displaymember) و کد رو در پشت پرده (valuemember ) نگه میدارن. موقع ذخیره هم،ارزش هر آیتم انتخاب شده (همون کد قسمت) رو با گزینه selectedvalue بدست میارن.
خیلی راحت
از کامپوننت های جانوس استفاده کن
گرید را بنداز تو کمبو
ممنونم
میشه یه نمونه سورس بذارید
درود بر شما
این نمونه که می گذارم دقیقا چیزیه که شما می خواین
از هیچ کامپوننتی هم استفاده نشده
اگه خوشتون اومد سلامتی همه دوستان لبخد بزنید
تشکر
ولی برای String ها چرا جواب نمیده
سلام به دوستان عزیز منم این مشکل رو دارم
من دارم یه برنامه می نویسم البته با استفاده از Stored Procedures های sql server 2005
لطفا اگر امکان داره دقیقا من فقط می خوام کمبو باکس متن نام و نام خانوادگی رو نمایش بده و کد او رکورد رو هم دخیره کنه البته کد زیر رو نوشتم ولی فقط نام خانوادگی رو نشون می ده.
به تصویر زیر نگاه کن
ضمیمه 124213
{
// Baray por kardan combo box as jadval person
SqlDataAdapter da = newSqlDataAdapter("SelectAllperson", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = newDataTable();
da.Fill(dt);
cmbPerson.DataSource = dt;
cmbPerson.DisplayMember = "LastName" ;
cmbPerson.ValueMember = "id";
FillGrid();
}
آخرین ویرایش به وسیله rasoul babadi : یک شنبه 13 مهر 1393 در 09:14 صبح
یا باید از کامپوننت های آماده استفاده کنید، یا از رویداد Format (برای نمایش متن دلخواه در هر آیتم) یا از رویداد DrawItem (برای رسم تصویر دلخواه به ازای هر آیتم.
برای روش آخر یکی نمونه قبلا گذاشته بودم جستجو کنید.
combobox.png
از کامپوننت استفاده کنید . به هر شکلی که بخاید میتونید تغییر بدید
متوجه نشدم میشه برام توضیح بدید البته اگر امکان داشته باشه. آخه من فایل های پیوسته که در پست های بالایی بود گرفتم اما درست نشد.
اطلاعات افرادی که در بانک کارمند ذخیره کردخ کدش درست عمل می کنه و نام خانوادگی رو توی کمبو باکس نمایش میده اما اگر توی جدول من چند نام خانوادگی مشترک داشته باشم در انتخاب کارمند مورد نظرم به مشکل بر می خورم برای همین می خواستم که نام و نام خانوادگی کارمند در کمبو باکس مشخص باشه.
Untitled.jpg
عزیز !!! کاری نداره یه کمبو باکس سفارشی درون یه کلاس درست کن به شرح ذیل .... بعد مثل همه کمبو باکس ها پرش کن :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;
using System.Globalization;
using System.Drawing;
namespace Dr_bodagi2
{
public class WishWish : ComboBox
{
public WishWish()
{
DrawMode = DrawMode.OwnerDrawVariable;
}
public new DrawMode DrawMode
{
get
{
return base.DrawMode;
}
set
{
if (value != DrawMode.OwnerDrawVariable)
{
throw new NotSupportedException("نیاز به ساختار اختصاصی می باشد ");
}
base.DrawMode = value;
}
}
public new ComboBoxStyle DropDownStyle
{
get
{
return base.DropDownStyle;
}
set
{
if (value == ComboBoxStyle.Simple)
{
throw new NotSupportedException("این شیوه پشتیبانی نمی شود");
}
base.DropDownStyle = value;
}
}
protected override void OnDataSourceChanged(EventArgs e)
{
base.OnDataSourceChanged(e);
InitializeColumns();
}
protected override void OnValueMemberChanged(EventArgs e)
{
base.OnValueMemberChanged(e);
InitializeValueMemberColumn();
}
protected override void OnDropDown(EventArgs e)
{
base.OnDropDown(e);
this.DropDownWidth = (int)CalculateTotalWidth();
}
const int columnPadding = 5;
private float[] columnWidths = new float[0];
private String[] columnNames = new String[0];
private int valueMemberColumnIndex = 0;
private void InitializeColumns()
{
PropertyDescriptorCollection propertyDescriptorCollection = DataManager.GetItemProperties();
columnWidths = new float[propertyDescriptorCollection.Count];
columnNames = new String[propertyDescriptorCollection.Count];
for (int colIndex = 0; colIndex < propertyDescriptorCollection.Count; colIndex++)
{
String name = propertyDescriptorCollection[colIndex].Name;
columnNames[colIndex] = name;
}
}
private void InitializeValueMemberColumn()
{
int colIndex = 0;
foreach (String columnName in columnNames)
{
if (String.Compare(columnName, ValueMember, true, CultureInfo.CurrentUICulture) == 0)
{
valueMemberColumnIndex = colIndex;
break;
}
colIndex++;
}
}
private float CalculateTotalWidth()
{
float totWidth = 0;
foreach (int width in columnWidths)
{
totWidth += (width + columnPadding);
}
return totWidth + SystemInformation.VerticalScrollBarWidth;
}
protected override void OnMeasureItem(MeasureItemEventArgs e)
{
base.OnMeasureItem(e);
if (DesignMode)
return;
for (int colIndex = 0; colIndex < columnNames.Length; colIndex++)
{
string item = Convert.ToString(FilterItemOnProperty(Items[e.Index], columnNames[colIndex]));
SizeF sizeF = e.Graphics.MeasureString(item, Font);
columnWidths[colIndex] = Math.Max(columnWidths[colIndex], sizeF.Width);
}
float totWidth = CalculateTotalWidth();
e.ItemWidth = (int)totWidth;
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
if (DesignMode)
return;
e.DrawBackground();
Rectangle boundsRect = e.Bounds;
int lastRight = 0;
//Shakir
//using (Pen linePen = new Pen(SystemColors.GrayText))
using (Pen linePen = new Pen(Color.Black))
{
using (SolidBrush brush = new SolidBrush(e.ForeColor))
//using (SolidBrush brush = new SolidBrush(BackColor))
{
if (columnNames.Length == 0 && e.Index >= 0)
{
e.Graphics.DrawString(Convert.ToString(Items[e.Index]), Font, brush, boundsRect);
}
else
{
for (int colIndex = 0; colIndex < columnNames.Length; colIndex++)
{
string item = Convert.ToString(FilterItemOnProperty(Items[e.Index], columnNames[colIndex]));
boundsRect.X = lastRight;
boundsRect.Width = (int)columnWidths[colIndex] + columnPadding;
lastRight = boundsRect.Right;
if (colIndex == valueMemberColumnIndex)
{
using (Font boldFont = new Font(Font, FontStyle.Bold))
{
e.Graphics.DrawString(item, boldFont, brush, boundsRect);
}
}
else
{
e.Graphics.DrawString(item, Font, brush, boundsRect);
}
if (colIndex < columnNames.Length - 1)
{
e.Graphics.DrawLine(linePen, boundsRect.Right, boundsRect.Top, boundsRect.Right, boundsRect.Bottom);
}
}
}
}
}
e.DrawFocusRectangle();
}
}
}
این هم اختصاص دیتا تیبل :
private void Form1_Load(object sender, EventArgs e)
{
DataTable dtTest = new DataTable();
dtTest.Columns.Add("ID", typeof(int));
dtTest.Columns.Add("Name", typeof(string));
dtTest.Columns.Add("L-Name", typeof(string));
dtTest.Rows.Add(1, "فروغ ", "تهمتن زاده اصل تهرانی فر");
dtTest.Rows.Add(2, "امیر ارسلان ", "نامدار");
dtTest.Rows.Add(3, "بیژن ", "منیژهخواه اکبرآبادی ");
dtTest.Rows.Add(4, "افشین ", "صبوحی پرور شترخواه");
dtTest.Rows.Add(5, "ناهید", "سمندرپورقلندر افکن");
wishWish1.DataSource = dtTest;
wishWish1.DisplayMember = "Name";
wishWish1.ValueMember = "ID";
}
با سلام
من کدهای مهندس khokhan رو کپی کردم و اجرا کردم ولی خطا میده میشه لطفا دلیل خطا رو بگید. ظاهرا به رفرنس خطا میده:
Untitled.jpg
شاید .....................خطا میده میشه لطفا دلیل خطا رو بگید. ظاهرا به رفرنس خطا میده:
سلام دوست عزیز
خوب این طور که من متوجه شدم باید اول اون کد بالایی رو بنویسم و یک کمبوباکس بسازم *** بعد اطلاعاتم از بانک اسکیوال فراخوانی کنم ***. من اطلاعاتم رو به صورت زیر فراخوانی کردم هر چند که قبلا کدش رو گذاشتم . کجای این کد باید دو ستون رو فراخوانی کنم آخه شما تو کد اختصاص دیتا تیبل خودتون جدول رو پر کردین اما من می خوام خودش اتوماتیک پر بشه زمانی که اطلاعات کارمند رو در فرم دیگری ثبت می کنم نام و نام خانوادگیش توی این کمبو نمایش داده بشه.
نمیشه با دستور اسکیو ال یه select بزنم با and دوتا ستون رو فراخوانی کنم.
ضمیمه 124449
جناب khokhan ممنون از پاسختون.
اول اینکه توی رفرنسها Microsoft.Csharp برای من علامت تعجب داره. یعنی مشکل داره. این dll رو از کجا میشه دانلود کرد؟
و دیگه اینکه نام کلاس شما WishWish هستش ولی در لود فرم WishWish1 استفاده شده بدون نمونه سازی! . برام جالبه که بدونم این WishWish1 از کجا اومده؟
سیستم من vs2008 هستش.
سلام دادش راست میگه من این کد توی برنامم کپی کردم همش بهم خورد اکثرا دستورات رو ازشون خطا می گرفت من این ویش ویش شما رو کجا باید بزارم
این کارو کردم از آدرس زیر یه کمپانت کلاس ساختم کدرو اونجا کپی کردم اما....
add new item - Componet Class
قابل توچه مدیران محترم ...خیلی سعی کردم نمونه آپلود نکنم می بینین که نمی شه ...... بعدا شاکی نشین ....
دوست خوبم rasoul babadi یعد از اینکه کلاس کمبو باکس سفارشی رو ایجاد کردی یه بار پرو ژه رو rebuild solution کنین
خواهید دید که یه کامپوننت به نام wishwish توی تول باکس (اولین گزینه ) ایجاد می شه
از گوشش بگیر بنداز توی فرم
اختصاص دیتا تیبل هم که دیگه فرقی نداره که از طریق کد نویسی ایجاد شده باشه یا از بانک فراخوانی شده باشه
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public DataTable GetDataTable()
{
SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Bodagi.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
conn.Open();
string query = "SELECT * FROM zirna ";
SqlCommand cmd = new SqlCommand(query, conn);
DataTable t1 = new DataTable();
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
a.Fill(t1);
}
return t1;
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = GetDataTable();
wishWish1.DataSource = dt;
wishWish1.DisplayMember = "f_name";
wishWish1.ValueMember = "ID";
}
به نظر من بهترین راه اینه که به جای combobox یک Textbox بزارید که موقع کلید داخل اون یک gridview درست از ریزش نمایش داره بشه که با leave شدن موس از روی گرید، گرید دوباره محو بشه
هم شکلش میشه دقیقا مثل کمبوباکس چندستونه و هم کنترل بسیار زیادی روش داری و میتونی هرکاری باهاش بگنی
اگه به نظرت جالب بود میتونم بیشتر توضیح بدم و کد بزارم برات
موفق باشی