مشاهده نسخه کامل
: سه سوال ساده از سی شارپ...
1ـ برای تشخیص تیک خوردن یک آیتم در ListView باید از چه رویداد و کدی در آن رویداد استفاده کنیم؟ (مثلا می خواهم تولتیپ آیتمی که تیک آن فعال شده است را بخوانم)
2ـ تابع جدا کردن یک الگو (رشته) از رشته بزرگتر دیگر چیست؟
3ـ خصوصیت TextAlign مربوط به Lable های من تغییر نمی کند یعنی مثلا بعد از تغییر آن به TopRight و همچنین اضافه کردن یک رشته بزگتر به lable کاملا مشخص است که سمت چپ ثابت مانده و رشته به سمت راست می رود (دقیقا مثل وقتی که TopLeft باشد) RthToLeft را هم تست کردم
با تشکر
سلام
1)
رویداد اطلاع دهند تغییر تیک خوردن ItemChecked است.
خصیصه حاوی مقادیر تیک خورده CheckedIndices و یا CheckedItems است.
2)
جدا کردن یعنی چه؟
اگر یک String بزرگ را میخواهید از محل مشخص خردش کنید از متد Substring استفاده کنید.
اگر یک String بزرگ را را با حسای جداکننده های خاصی میخواهید به چندین واحد کوچکتر بشکنید از متد Split استفاده کنید.
اگر محل یک String کوچک تر را میخواهید در یک String بزرگتر پیدا کنید از متد IndexOf استفاده کنید.
3)
طبیعتاً TextAlign تا وقتی AutoSize فعال باشد معنی ندارد.
چون باید Label بزرگتر از متن باشد تا TextAlign مفهوم داشته باشد.
AutoSize را False کنید.
ضمن تشکر در مورد سوال اول اگه میشه یه مثال بزنید (لطفا کدشو همینجا بنویسید چون من net 2008. ندارم)
در اصل نمی دونم چطوری اون چک باکس انتخاب شده را به CheckedItems بشناسونم
جای علامت سوال چی بگذارم MessageBox.Show(Listview1.CheckedItems[??].tooltip) Mamnon
سلام
چون من net . ندارم
خوب دقیقاً این کدها به چه دردی میخوردند؟
البته میدانم که میشود کدهای دات نت را در Notepad هم نوشت و با خط فرمان بدون VS کامپایل کرد، ولی کمی دور از ذهن است!
در اصل نمی دونم چطوری اون چک باکس انتخاب شده را به CheckedItems بشناسونم
CheckedItems لیست یا Collection است حاوی تمام موارد تیک خورده.
CheckedItems خودش حاوی انها است و شما چیزی را نباید به ان بشناسید!
اگر کاربر ده مورد را تیک زده باشد CheckedItems حاوی 10 آیتم از 0 تا 9 است !
اگر شما میخواهید اولین آیتم تیک خورده (میتوان بیش از یک آیتم تیک داشته باشد) tooltip اش نمایش داده شود:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته منظور من از نداشتن دات نت 2008 بود یعنی من دات نت 2005 دارم
سوال دقیق تر من این است که چگونه تول تیپ آن چک باکسی که انتخاب شده را نمایش دهیم نه اولین از بین تمامی انتخابها (البته اگر نحوه اضافه کردن در listview را می دانستم خودم پیدا می کردم اما ظاهرا به ترتیب انتخاب شدن در CheckedItems اضافه نمی کند بلکه (فکر کنم) به ترتیب بزرگتر اضافه می کند)
مشکل دیگر اینکه مثلا وقتی 3 انتخاب داریم و یکی از آنها را برمی داریم باز هم این رویداد اجرا می شود در حالی که می خواهم فقط در موقع انتخاب این انتخاب بیافتد
سلام
چندبار متنتان را خواندم تا بالاخره خوشبختانه فهمیدم منظورتان چیست ...
خوب رویداد CheckedItems را کدنویسی کنید: (!)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از این حوصله و توجهتون خییییییییییییییلی ممنونم
چطوری میتونم اطلاعات ستون اول از سطر دیتاگریدی که روی آن دبل کلیک شده را به دست بیاورمد (رویداد؟ + کد آن؟)
سلام
2)
جدا کردن یعنی چه؟
اگر یک String بزرگ را میخواهید از محل مشخص خردش کنید از متد Substring استفاده کنید.
اگر یک String بزرگ را را با حسای جداکننده های خاصی میخواهید به چندین واحد کوچکتر بشکنید از متد Split استفاده کنید.
اگر محل یک String کوچک تر را میخواهید در یک String بزرگتر پیدا کنید از متد IndexOf استفاده کنید.
می خواهم مثلا رشته "کتاب" را در تکسباکسی سرچ کنم و اگر در آن نبود به آن اضافه کنم حالا نمی دانم با کدام یک از توابع فوق و چگونه این کار را انجام دهم!!!؟؟؟
البته در شرایطی هم می خواهم در صورت وجود آن رشته در تکس باکس آن را حذف کنم؟؟؟
همچنین یک دیتا گرید دارم که خصوصیات allowtoadd و... true است اما بعد از اضافه یا حذف کردن فرقی نمیکند
.
.
.
این هم دیتا سورس دیتا گرید است (خروجی تابع select دیتا تیبل است)
dataGridView1.DataSource = DB.Select("Select * from Ostad Order by ID", 1); mamnon
چرا اضافه و یا حذف نمی کند (در خود دیتا گرید)
سلام
چطوری میتونم اطلاعات ستون اول از سطر دیتاگریدی که روی آن دبل کلیک شده را به دست بیاورمد (رویداد؟ + کد آن؟)
رویدادهای زیادی وجود دارد که میتوانید استفاده کنید، مثل CellDoubleClick و ...
و برای سلول اول هم میتوانید از datagridview[0, e.RowIndex].Value استفاده کنید یا از Binding جاری تان استفاده کنید.
می خواهم مثلا رشته "کتاب" را در تکسباکسی سرچ کنم و اگر در آن نبود به آن اضافه کنم حالا نمی دانم با کدام یک از توابع فوق و چگونه این کار را انجام دهم!!!؟؟؟
مطمئن هستید منظورتان TextBox بوده؟ و مثلاً ComboBox نبوده؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همچنین یک دیتا گرید دارم که خصوصیات allowtoadd و... true است اما بعد از اضافه یا حذف کردن فرقی نمیکند
چرا اضافه و یا حذف نمی کند (در خود دیتا گرید)
دو حالت دارد !
اضافه و حذف کلاً نمیکند و اصلاً موقت هم انجام نمیشود.
دوم اضافه و حجم موقت انجام میشود ولی ذخیره نمیشود و دفعه بعد که می آیید دوباره به نوعی reset میشود !
که اغلب افراد در شروع کار مشکل دوم را دارند.
الف)
در دات نت و ADO.Net ذخیره خودکار انجام نمیشود باید فرمان Save هم مثل بارگذاری با متد Update و توسط یک DataAdapter با سه Command ویرایشی انجام شود.
ب)
قالباً دیتابیسهایی که در پروژه هستند در پنجره Properties تنظیم شده اند که با هر بار کامپایل به محل کامپایل کپی شوند و فایل بانک قبلی حذف شود.
شما ببینید کدام شرایط را دارید تا توضیح بیشتر راحت تر شود.
البته در شرایطی هم می خواهم در صورت وجود آن رشته در تکس باکس آن را حذف کنم؟؟؟
????????
.
.
.
.
.
اضافه و حجم موقت انجام میشود ولی ذخیره نمیشود و دفعه بعد که می آیید دوباره به نوعی reset میشود !
دقیقا همین حالت است. البته کاملا مشخص است که اطلاعات وارد شده در دیتا گرید، در دیتا بیس اصلی ذخیره نمی شود چرا که من یک فیلد کلید اتونامبری دارم که می توانم اطلاعات آن را خودم آن هم تکراری وارد کنم
بازم ممنون
یه سوال دیگه
در برنامه ام از فرم های پدر و فرزند استفاده کرده ام و فرزند را به صورت Maximumsize و به صورت زیر باز می کنم
PersonalInformation pi = new PersonalInformation(); mamnon
pi.MdiParent = this; mamnon
pi.Show(); mamnon
اما همان طور که در تصویر می بینید در موقع باز شده (برای اولین بار) به شکل زیر باز می شود و کامل باز نمی شود.
چرا؟؟؟؟؟؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یه سوال دیگه...
به وسیله کد و در زمان اجرا اطلاعات دیتا بیسم را به listView اضافه می کنم به این ترتیب که اطلاعات نام و فامیل را به عنوان text هر آیتم Listview و کد هر شخص را به عنوان tooltip اضافه می کنم و مشکلی هم ندارم اما هنگامی که خصوصیت Sorting از listview را مثلا به Ascending تنظیم می کنم اطلاعات بعضی از tooltip ها را نمایش نمی دهد.
اینم کدی که اطلاعات listview را اضافه می کند:
dset تنظیم و وصل شده است
for (int i = 0; i < dSet.Tables[0].Rows.Count; i++)
{
string Combain = dSet.Tables[0].Rows[i][2] + " " +dSet.Tables[0].Rows[i][1];
ActiveForm.listView1.Items.Add(Combain);
ActiveForm.listView1.Items[i].ToolTipText = dSet.Tables[0].Rows[i][0].ToString();
}
علت چیست؟؟؟؟؟؟
.
.
.
ما را به جواب کاش فراموش نسازند؛
برنامه نویسانی که اهل فن اند!!!
سلام
البته در شرایطی هم می خواهم در صورت وجود آن رشته در تکس باکس آن را حذف کنم؟؟؟
فرق خاصی ندارد.
توابع کار روی String را در خود کلاس String وجود دارد و اگر یک نقطه ناقابل بزنید کل توابع لیست خواهند شد و مثلاً برای حذف میتوانید از چیزی شبیه این استفاده کنید !
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اضافه و حجم موقت انجام میشود ولی ذخیره نمیشود
باید فرمان Save را صراحتاً بدهید.
اگر TypedDataSet و TypedDataAdapter دارید الز فرمان DataAdapterName.Update استفاده کنید.
(درست مقابل DataAdapterName.Fill)
تاپیک مرتبط:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اما همان طور که در تصویر می بینید در موقع باز شده (برای اولین بار) به شکل زیر باز می شود و کامل باز نمی شود.
چرا؟؟؟؟؟؟
همینطوری نمیتوانم بگویم مشکلتان گذاشت ...
یا MaxSize تایین کرده اید یا Layout را در دستوری متوقف کرده اید ...
اگر مشکلتان حل نشد کد دو فایل کد فرم دوم را آپلود کنید.
به وسیله کد و در زمان اجرا اطلاعات دیتا بیسم را به listView اضافه می کنم به این ترتیب که اطلاعات نام و فامیل را به عنوان text هر آیتم Listview و کد هر شخص را به عنوان tooltip اضافه می کنم و مشکلی هم ندارم اما هنگامی که خصوصیت Sorting از listview را مثلا به Ascending تنظیم می کنم اطلاعات بعضی از tooltip ها را نمایش نمی دهد.
کد شما کد پایداری نیست و به دلایل مختلف میتواند دچار مشکل شود، (از جمله همین مطلبی که بیان کردید و...)
کد مناسبتر:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با کمک شما دوست عزیز به جواب سه سوال از چهار سوال مطرح شده توسط خودم رسیدم
1ـ حذف کردن قسمتی از یک تکس باکس (مثلا حذف کلمه "علیرضا" از بین جمله "سلام علیرضا چطوری")
string Part1, Part2, OldStr;
OldStr = textBox9.Text;
Part1 = OldStr.Substring(0, OldStr.IndexOf(chBox.Text));
Part2 = OldStr.Substring(OldStr.IndexOf(chBox.Text) + chBox.Text.Length);
textBox9.Text = Part1 + Part2;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2ـ برای مشکل عدم باز شدن کامل یک فرم در فرم مادر هم از خصوصیت WindowState به صورت کد استفاده کردم نه Property:
PersonalInformation pi = new PersonalInformation();
pi.MdiParent = this;
pi.WindowState = FormWindowState.Maximized;
pi.Show();
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3ـ مشکل Sort کردن در ListView هم با استفاده از کد جنابعالی حل شد
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(اینارو گفتم تا بتونم راحت تر از زحماتتون تشکر کنم چراکه همین جواب دادن های شما موجب دلگرمی ما میشه )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
اما مشکل عدم ثبت اطلاعات بعد از تغییر یا اضافه کردن در دیتاگرید هنوز پابرجاست. شما فرمودید که از کد Update استفاده کنم. اما کجا و چطوری؟
همان طوری که قبلا اشاره کردم، بنده یک DataTable را به DataSource دیتاگرید متصل کرده ام
OleDbConnection myConn = new OleDbConnection(strDSN);
OleDbDataAdapter myCmd = new OleDbDataAdapter(strSQL, myConn);
myConn.Open();
DataSet dtSet = new DataSet();
myCmd.Fill(dtSet);
DataTable dTable = dtSet.Tables[0];
dataGridView1.DataSource = dTable;
حال می خواهم بعد از تغییرات روی سطر و ستونهای دیتا گرید، تغییرات اعمال شود (AllowUserToAddRow و AllowUserToDeleteRow هم True می باشد) اما نمی دانم چطوری و کجا؟ آخه در ویبی 6 همین که این دو گزینه True بود دیگه همه کاری می کرد
دستور DataAdapterName.Update را در کجا استفاده کنم؟ آیا منظورتون اینکه در کنار Fill استفاده کنم، در این صورت تغیری اعمال نشده است چرا که دستور Fill فقط یکبار آنهم در ابتدای اتصال به دیتا بیس استفاده شده است.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
و طبق معمول یک سوال جدید دیگه ('_')
در این لیست ویویی که اطلاعات دیتا بیس قرار گرفته چگونه می توان براساس text سرچ کرد (در واقع تابع مخصوص این کارو می خوام (اگر دارد) و یا نحوه دسترسی به آیتمهای داخل ListView را بیان کنید می توان کد سرچ را نوشت)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
بازم ممنون
سلام
اما مشکل عدم ثبت اطلاعات بعد از تغییر یا اضافه کردن در دیتاگرید هنوز پابرجاست. شما فرمودید که از کد Update استفاده کنم. اما کجا و چطوری؟
همان طوری که قبلا اشاره کردم، بنده یک DataTable را به DataSource دیتاگرید متصل کرده ام
حال می خواهم بعد از تغییرات روی سطر و ستونهای دیتا گرید، تغییرات اعمال شود (AllowUserToAddRow و AllowUserToDeleteRow هم True می باشد) اما نمی دانم چطوری و کجا؟ آخه در ویبی 6 همین که این دو گزینه True بود دیگه همه کاری می کرد
دستور DataAdapterName.Update را در کجا استفاده کنم؟ آیا منظورتون اینکه در کنار Fill استفاده کنم، در این صورت تغیری اعمال نشده است چرا که دستور Fill فقط یکبار آنهم در ابتدای اتصال به دیتا بیس استفاده شده است.
سیستم DataAdapter و DataSet و DataTable یک مکانیزم غیر متصل است.
یعنی شما اول کل اطلاعات مورد نیاز برای نمایش را در RAM لود کرد و ویرایش و حذف و اضافه میکنید و در اخر تغییرات را مجدد در دیتابیس ذخیره میکنید.
نتیجه این مکانیزم ان است که نیاز میشود دستور بارگذاری و ذخیره را خودتان باید بدهید.
یعنی مثلاً برخلاف ADO که دکمه Save در ان معنی نداشته و خودکار با ناوبری سطرها اطلاعات ذخیره میشد در ADO.Net نیاز دارید دکمه Save داشته باشید و کاربر یا برنامه صراحتاً فرمان Save را بدهد.
حالا این بارگذاری اولیه با متد DataAdapter.Fill انجام میشود و ذخیره سازی تغییرات هم با DataAdapter.Update انجام میشود.
Fill نیاز به یک SQL-SELECT دارد ولی Update نیاز به سه دستور SQL-INSERT و SQL-DELETE و SQL-UPDATE دارد.
شما میتوانید یک DataAdapter آماده و ساده را با هر 4 دستور فوق با کدی مثل این تولید کنید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا میتوانید با فرمانی مثل این اطلاعات را خوانده و پر کرده و نمایش دهید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و برای ذخیره اطلات در زمان کلیک دکمه Save و یا بسته شدن فرم و... هم میتوانید کدی مثل این بنویسید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(
کدهای کوتاهی برای حل مشکل فعلی شما بیان کردم ولی ADO.Net گسترده تر از ان است که بتوان در یک پست و حتی یک تاپیک چندین صفحه ای ان را کامل باز کرد و تشریح کرد.
نتیجتاً پیشنهاد میکنم که اگر پروژه موقت دانشجویی ندارید و میخواهد برنامه نویسی را جدی ادامه دهید حتماً حتماً کتابی در خصوص ADO.Net تهیه و مطالعه کنید.
یقیناً یک کتاب 300 و 500 صفحه ای بهتر میتواند ساختار و اشیا و دستورات مختلف ADO.Net را برایتان باز کند.
)
در این لیست ویویی که اطلاعات دیتا بیس قرار گرفته چگونه می توان براساس text سرچ کرد
راه ساده و سریع ان این است که یک BindingSource به نمایه طراحی فرمتان اضافه کنید و آنرا به DataSet یا DataTable تان متصل کنید و بعد هم DataGridView تان را به این BindingSource وصل کنید ...
حالا میتوانید با تغییر در خصیصه BindingSource.Filter سریعاً آیتمهای خاصی را فیلتر کنید و DataGridView هم سریعتاً موارد فیلتر شده را نشان دهد ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید.
دوست عزیز سلام
کد زیر قسمتی از پروژه ایه که Error زیاد داره!
# BindingSource bs = new BindingSource();
private void ClassActivePeriodFrm_Load(object sender, EventArgs e)
{
DataTable classview = Assistant.ToolsDataBase.GetClassActivePeriodview() ;
bs = new BindingSource(classview, "");
//combobox
DataTable dtperiod = Assistant.ToolsDataBase.GetPeriodTbl();
classactiveperiodcbx.DataSource = dtperiod;
classactiveperiodcbx.DisplayMember = "Name";
classactiveperiodcbx.ValueMember = "PeriodId_PK";
}
private void btnrun_Click(object sender, EventArgs e)
{
//datagridview
dataGridView1.AutoGenerateColumns = false;
// ERROR
bs.Filter = "PeriodId_FK" + classactiveperiodcbx.SelectedValue.ToString() + "" ;
dataGridView1.DataSource = bs;
با توجه به توضیحات بالا باید جواب بگیرم اما با توجه به اینکه با تریس dt پر میشه اما Gridview چیزی بر نمیگردونه!
ضمنا ممنون میشم بگید کد ها رو چطور توی کادر قرار بدم
سلام
کد خیلی کامل نیست ...
تنها کمکی که میتوانم انجام دهم این است که شاید و احتمالا کد فیلتر مورد نظر شما این است:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.