PDA

View Full Version : سوال: انتخاب برخی از سطرهای DataTable



mahmata
سه شنبه 31 شهریور 1394, 22:13 عصر
سلام سوالم یه کم پیچیدس هر کی کمکم کنه خدا خیرش بده واقعا :افسرده:
من توی فرمم دو تا combobox دارم به نام های مرحله و دستگاه و به این صورته که هر مرحله یه تعدادی دستگاه داره. و اینم بگم که مرحله برای خودش یه پایگاه داده داره و دستگاه هم همینطور.
و توی فرم مربوط به اضافه کردن دستگاه مشخص میکنیم که اون دستگاه برای کدوم مرحله هست.
کمبوباکسهای مرحله و دستگاه هم به پایگاه داده هاشون متصل هستن.
حالا میخوام بر اساس هر گزینه ای که کاربر توی کمبوباکس مرحله انتخاب میکنه...دستگاه های اون مرحله توی کمبوباکس دستگاه بیاد...
یه کدی هم نوشتم برای فیلتر کردن datatable دستگاه، ولی دقیق بلد نیستم.

clsMachin machin = new clsMachin(); DataTable dt = machin.SelectAll();

DataRow row = dt.NewRow();


row["phaseName"] = cmbPhaseName.Text;

dt.Rows.Find(row);





cmbMachinName.DataSource = dt;
cmbMachinName.DisplayMember = "machinName";

mahmata
سه شنبه 31 شهریور 1394, 23:09 عصر
یه مثال کوچیک هم بزنم برای راحتتر شدن قضیه
مثل وقتی که شما از یه کمبوباکس ، استان رو انتخاب میکنی بعد توی کمبوباکس بعدی شهرای مربوط به اون استان میاد
اینو چه جوری بنویسم
خواهشا راهنماییم کنید

محمد رضا فاتحی
چهارشنبه 01 مهر 1394, 06:56 صبح
سلام دوست عزیز اینجا یه توضیحاتی داده شده یه نگاه بنداز
http://barnamenevis.org/showthread.php?486315-%D9%84%D9%88%D8%AF-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-%DB%8C%DA%A9-%DA%A9%D9%85%D8%A8%D9%88-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%A8%D8%A7-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%85%D8%AA%D9%86-%DA%A9%D9%85%D8%A8%D9%88-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%AF%DB%8C%DA%AF%D8%B1&p=2175666&viewfull=1#post2175666

mahmata
چهارشنبه 01 مهر 1394, 23:05 عصر
سلام دوست عزیز اینجا یه توضیحاتی داده شده یه نگاه بنداز
http://barnamenevis.org/showthread.php?486315-%D9%84%D9%88%D8%AF-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-%DB%8C%DA%A9-%DA%A9%D9%85%D8%A8%D9%88-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%A8%D8%A7-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%85%D8%AA%D9%86-%DA%A9%D9%85%D8%A8%D9%88-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%AF%DB%8C%DA%AF%D8%B1&p=2175666&viewfull=1#post2175666


خیلی ممنون از راهنماییتون
اما ببینید من برنامه ام به صورت سه لایه سنتی هست...کدای sql رو توی کلاس مینویسم...برای همین مجبورم اطلاعات رو بریزم توی datatable
باید اگه بخوام datatable رو فیلتر کنم
اما نمیدونم چطوری؟

mahmata
یک شنبه 05 مهر 1394, 21:51 عصر
ببخشید من تو نت سرچ کردم اما نتونستم مشکلمو حل کنم
اگه کسی میتونه راهنماییم کنه ممنون میشم

shadi khanum
دوشنبه 06 مهر 1394, 11:18 صبح
ببخشید من تو نت سرچ کردم اما نتونستم مشکلمو حل کنم
اگه کسی میتونه راهنماییم کنه ممنون میشم

دوست عزیز شما میتونی توی اون فرم که میخواهی توی کمبو ها اطلاعات نشون بدی به جای اینکه دیتاتیبل دستگاه ها رو به کمبوی دستگاه بدی ، از روی این دیتاتییل یه دیتاوییو درست کنی و توی SelectedValueChange کمبوی مرحله، این دیتاویوو رو فیلتر کنی چون دیتاتیبل قابلیت فیلتر شدن نداره و ار میخای بتونی دیتای دیتاتیبل رو فیلتر کنی باید از روی اون دیتاویوو بسازی و اون دیتاویو رو فیلتر کنی و datasource کمبوی دستگاه ها رو اون دیتا ویوو بدی.
این کد رو توی لود شدن فرمت بنویس

DataView DVDastga = new DataView(dtDastgah, "", "", DataViewRowState.CurrentRows);
comboboxDastgah.datasource = dvdastga;


و کدهای مربوط به displayMember و valueMember رو هم همونجوری بنویس
حالا تو رویداد selectedValueChaneg کمبوی مرحله این کد رو بنویس

DVDastga.RowFilter = "maraleID = " + comboMarhale.selectedvalue


موفق باشی

mahmata
دوشنبه 06 مهر 1394, 14:11 عصر
دوست عزیز شما میتونی توی اون فرم که میخواهی توی کمبو ها اطلاعات نشون بدی به جای اینکه دیتاتیبل دستگاه ها رو به کمبوی دستگاه بدی ، از روی این دیتاتییل یه دیتاوییو درست کنی و توی SelectedValueChange کمبوی مرحله، این دیتاویوو رو فیلتر کنی چون دیتاتیبل قابلیت فیلتر شدن نداره و ار میخای بتونی دیتای دیتاتیبل رو فیلتر کنی باید از روی اون دیتاویوو بسازی و اون دیتاویو رو فیلتر کنی و datasource کمبوی دستگاه ها رو اون دیتا ویوو بدی.
این کد رو توی لود شدن فرمت بنویس

DataView DVDastga = new DataView(dtDastgah, "", "", DataViewRowState.CurrentRows);
comboboxDastgah.datasource = dvdastga;


و کدهای مربوط به displayMember و valueMember رو هم همونجوری بنویس
حالا تو رویداد selectedValueChaneg کمبوی مرحله این کد رو بنویس

DVDastga.RowFilter = "maraleID = " + comboMarhale.selectedvalue


موفق باشی


خیلی ممنون از راهنمایی خوبتون
الان فقط یه مشکلی دارم که DataViewی تعریف شده توی load رو در رویداد selectedValuChanged نمیشناسه، چیکار باید بکنم؟

shadi khanum
سه شنبه 07 مهر 1394, 08:49 صبح
تعریف Dataview رو بصورت سراسری توی فرمتون انجام بدید و توی رویداد load فقط اون رو New کنید. یعنی خارج از متد لود بنویسید

Dataview DVDastga;


و توی لود بنویسید

DVDastga = new DataView(dtDastgah, "", "", DataViewRowState.CurrentRows);


موفق باشید

mahmata
پنج شنبه 09 مهر 1394, 12:16 عصر
بازم خطا داد

به DVDastga.RowFilter = "maraleID = "+ comboMarhale.selectedvalue
خطای object refrence not set to an instance of an object

مشکل از کجاست

shadi khanum
شنبه 11 مهر 1394, 07:49 صبح
احتمالا دستورات پر کردن کمبو باکس رو قبل از new شدن DvDastgah نوشتید برای همین خطای object refrence میده. اگر بتونی کدت رو بفرستی، راحت تر میشه واست درستش کرد

mahmata
شنبه 25 مهر 1394, 18:48 عصر
این کد همون فرمم هست که میگم

using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;


namespace textileProject
{
public partial class frmAddStop : textileProject.frmTemplate
{
public frmAddStop()
{
InitializeComponent();
}


DataView dv;


public string strMachinName = "";
public string strPhaseName = "";
public string strShiftName = "";
public string strStopReasonName = "";
public int strStopTime = 0;
public string strShamsiDate = "";


private void frmAddStop_Load(object sender, EventArgs e)
{



clsPhase phase = new clsPhase();
DataTable dt = phase.SelectAll();
cmbPhaseName.DataSource = dt;
cmbPhaseName.DisplayMember = "phaseName";


clsShift shift = new clsShift();
dt = shift.SelectAll();
//row = dt.NewRow();
//row["shiftName"] = "";
//dt.Rows.InsertAt(row, 0);
cmbShiftName.DataSource = dt;
cmbShiftName.DisplayMember = "shiftName";


clsStopReason sr = new clsStopReason();
dt = sr.SelectAll();
//row = dt.NewRow();
//row["stopReasonName"] = "";
//dt.Rows.InsertAt(row, 0);
cmbStopReasonName.DataSource = dt;
cmbStopReasonName.DisplayMember = "stopReasonName";
sel();


clsMachin machin = new clsMachin();
dt = machin.SelectIdName();
dv = new DataView(dt,"", "", DataViewRowState.CurrentRows);

//dv.RowFilter = "phaseName = " + cmbPhaseName.Text;
cmbMachinName.DataSource = dv;
cmbMachinName.DisplayMember = "machinName";




cmbMachinName.Text = strMachinName;
cmbPhaseName.Text = strPhaseName;
cmbShiftName.Text = strShiftName;
cmbStopReasonName.Text = strStopReasonName;
nmrStopTime.Value = strStopTime;
bPersianCalenderTextBox1.Text = strShamsiDate;
}


private void sel()
{
clsStop stop = new clsStop();
DataTable dt = stop.SelectAllExceptMiladiDate();
dtgShowData.DataSource = dt;



}




private void btnAddTolidShift_Click(object sender, EventArgs e)
{


frmSearchStop frm = new frmSearchStop();
clsStop stop = new clsStop();

if (cmbMachinName.Text == string.Empty)
{
errMachin.SetError(cmbMachinName, "مقدار فیلد نباید خالی باشد");
cmbMachinName.Focus();
return;
}
else
{
errMachin.Clear();
stop.machinName = cmbMachinName.Text;
}
if (cmbPhaseName.Text == "" )
{
errPhase.SetError(cmbPhaseName,"مقدار فیلد نباید خالی باشد");
cmbPhaseName.Focus();
return;
}
else
{
errPhase.Clear();
stop.phaseName = cmbPhaseName.Text;
}


if (cmbShiftName.Text == "")
{
errShift.SetError(cmbShiftName, "مقدار فیلد نباید خالی باشد");
cmbShiftName.Focus();
return;
}
else
{
errShift.Clear();
stop.shiftName = cmbShiftName.Text;
}


if (cmbStopReasonName.Text == "")
{
errStopReason.SetError(cmbStopReasonName, "مقدار فیلد نباید خالی باشد");
cmbStopReasonName.Focus();
return;


}
else
{
errStopReason.Clear();
stop.stopReasonName = cmbStopReasonName.Text;
}
if (nmrStopTime.Value == 0)
{
errStopTime.SetError(nmrStopTime, "مقدار فیلد نباید خالی باشد");
nmrStopTime.Focus();
return;
}


else
{
errStopTime.Clear();
stop.stopTime = int.Parse(nmrStopTime.Value.ToString());
}
if (bPersianCalenderTextBox1.Text == "")
{
errDate.SetError(bPersianCalenderTextBox1, "مقدار فیلد نباید خالی باشد");
bPersianCalenderTextBox1.Focus();
return;
}
else
{
errDate.Clear();
stop.shamsiDate = bPersianCalenderTextBox1.Text;
}
stop.miladiDate = txtMiladiDate.Text;



if (txtStopId.Text == "")
{



stop.Insert();
MessageBox.Show("عملیات با موفقیت انجام شد");
sel();
}
else
{
stop.stopId = int.Parse(txtStopId.Text);


stop.Update(int.Parse(txtStopId.Text));
MessageBox.Show("عملیات با موفقیت انجام شد");
sel();
this.Close();
}





}


private void bPersianCalenderTextBox1_TextChanged(object sender, EventArgs e)
{
string shamsi = bPersianCalenderTextBox1.Text;
string year = shamsi.Substring(0, 4);
string month = shamsi.Substring(shamsi.Length - 5, 2);
string day = shamsi.Substring(shamsi.Length - 2, 2);
txtMiladiDate.Text = clsNeedCode.Miladi(year, month, day);
}


private void btnClear_Click(object sender, EventArgs e)
{
cmbStopReasonName.Text = cmbShiftName.Text = cmbPhaseName.Text = cmbMachinName.Text = "";
nmrStopTime.Value = 0;


}


private void btnEditTolidShift_Click(object sender, EventArgs e)
{
this.Hide();
var form2 = new frmSearchStop();
form2.Closed += (s, args) => this.Close();
form2.Show();
}





private void cmbPhaseName_SelectedValueChanged(object sender, EventArgs e)
{
dv.RowFilter = "phaseName = " + cmbPhaseName.SelectedValue;


//if (cmbPhaseName.SelectedValue != null)
//{
//DataView dv = cmbMachinName.DataSource as DataView;
//dv.RowFilter = "phaseName = " + cmbPhaseName.SelectedValue.ToString();
//}
}


private void cmbPhaseName_SelectedIndexChanged(object sender, EventArgs e)
{

}



}
}