PDA

View Full Version : سوال: اطلاعات دیتا بیس چندین بار در گرید ویو نشون داده میشن



fdaliry
شنبه 07 فروردین 1389, 23:27 عصر
سلام
من کد زیر را نوشتم تا با انتخاب از طریق کومبو باکس محتویات هر تی بل نشان داده شه
ولی برای بار دوم که یک ایتم کومبو باکس را انتخاب میکنم اطلاعات دیتابیس در گرید ویو دو بار به نمایش در میاد و برای سومین بار سه بار و ....
در صورتی که در دیتابیس ی بار ذخیره شده
ممنون میشم کمکم کنید مشکل را پیدا کنم





if (comboBox1.SelectedIndex == 0)
{
d = "select name as [نام کتاب],nevisandeh as [نام نویسنده],safahat as [صفحات],onvan as [عنوان],zaban as [زبان],arch as [شماره آرشیو] from network";
adap = new OleDbDataAdapter(d,con);
adap.Fill(ds, "network");
dataGridView1.DataSource = ds.Tables["network"];
}

hakelberfin
یک شنبه 08 فروردین 1389, 00:46 صبح
سلام

DataSet رو داخل همین کد تعریفش کن. یا داخل همین کد DataSet رو Null کن


adap.Fill(ds, "network");


ولی برای بار دوم که یک ایتم کومبو باکس را انتخاب میکنم اطلاعات دیتابیس در گرید ویو دو بار به نمایش در میاد و برای سومین بار سه بار و ....

هر بار مقدار Select شده به DataSet اضافه میشه .


یه سئوال کلی :
چرا اکثر دوستان به جای DataTable از DataSet استفاده میکنن؟ در ایجا شما اطلاعات یک جدول یا View رو انتخاب میکنید و به DataGridView یا ComboBox بایند می کنید . پس چه نیازی به DataSet هست؟
اگر شما در DataSet اطلاعات و ارتباط بین جداول رو نگه نمیدارین و فقط از یه جدول اطلاعاتی رو صرفا برای پرکردن یه کنترل میخواین از DataTable اسفاده کنید.

hakelberfin
یک شنبه 08 فروردین 1389, 01:05 صبح
دوست عزیز من اگه جای شما بودم یه تابع مینوشتم که در اون اطلاعات درخواستی شما از بانک اطلاعاتی واکشی میکرد و در خاصیت DataSource دیتاگرید قرار میداد.
بعد در روی رویداد
SelectedIndexChanged

کومبوباکستون ، اون تابع رو فراخونیش میکردم

مثلا


private void FillDataGridView()
{
try
{
System.Data.SqlClient.SqlCommand SqlCommand = new System.Data.SqlClient.SqlCommand();
SqlCommand.Connection = SqlConnection;
SqlCommand.CommandType = CommandType.Text;
SqlCommand.CommandText = @"SELECT * FROM TableName ";

DataTable dataTable = new DataTable();
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = SqlCommand;
sqlDataAdapter.Fill(dataTable);
this.dataGridView1.DataSource = dataTable;
}
catch (SqlException exp)
{
this.Close();
}
}





private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// مثلا شرط مورد نظر
this.FillDataGridView();
}

armiin
یک شنبه 08 فروردین 1389, 01:57 صبح
میتونی بعد از If تو کدت از

dataGridView1.DataSource = null;
یا

dataGridView1.Columns.Clear();
قرار بدی که هر بار مقدار جدید انتخاب کردی قبلیارو پاک کنه , ولی نظر این دوستمون در مورد DataTable هم خیلی خوبه !

sds1920
یک شنبه 08 فروردین 1389, 09:32 صبح
شما بهتره قبل از هر بار تکرار اطلاعات جدولت را پاک کنی.



if (comboBox1.SelectedIndex == 0)
{
if (ds.Tables.Contains("network") == true)
ds.Tables["network"].Clear();

d = "select name as [ ],nevisandeh as [ ],safahat as [],onvan as [],zaban as [],arch as [ ] from network";
adap = new OleDbDataAdapter(d, con);
adap.Fill(ds, "network");
dataGridView1.DataSource = ds.Tables["network"];
}

daivid_ d31r1
یک شنبه 22 فروردین 1389, 19:41 عصر
سلام دوستان




if (comboBox1.SelectedIndex == 0)
{
d = "select name as [نام کتاب],nevisandeh as [نام نویسنده],safahat as [صفحات],onvan as [عنوان],zaban as [زبان],arch as [شماره آرشیو] from network";
adap = new OleDbDataAdapter(d,con);
ds.Clear();
adap.Fill(ds, "network");
dataGridView1.DataSource = ds.Tables["network"];
}

FastCode
یک شنبه 22 فروردین 1389, 19:56 عصر
adap.ClearBeforeFill = true;