اتصال DataGrid به بانک Sql
سلام به مهندسین عزیز
در حال نوشتن برنامه ای در WPF هستم اما برای اتصال بانک با یک DataGrid دچار مشکل شده ام .
ابتدا یک DataGrid به XAML اضافه می کنم و کد زیر را هم اضافه می کنم .
ItemsSource="{Binding}"
یک Stored Procedure دارم که برای Select کردن یک فیلد از بانک استفاده می شود .کدش هم به صورت زیر است .
CREATE PROCEDURE Select_LegalName
AS
SELECT LT_Name
FROM Legal_Type
GO
و در Visual Studio از کد زیر استفاده می کنم .
SqlConnection connect = new SqlConnection("Data Source=.;Initial Catalog=GuestHouse;uid=ADMIN;pwd=admin");
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand command = new SqlCommand("SP_Select_LegalName", connect);
da.SelectCommand = command;
DataTable dt = new DataTable();
dt.Columns.Add("نام");
DataRow row;
SqlDataReader reader;
connect.Open();
reader = command.ExecuteReader();
while (reader.Read())
{
row = dt.NewRow();
row[0] = reader.GetSqlString(0);
dt.Rows.Add(row);
}
DataView view=new DataView(dt);
datagrid1.DataContext = view;
و بعد از آن به تعداد رکوردهای فیلد موردنظر رکورد اضافه می کند اما به شکل زیر :
1 ضمیمه
نقل قول: اتصال DataGrid به بانک Sql
از Linq to sql استفاده کنید اینم مثال بسیار ساده
درضمن "{ItemsSource="{Binding هم نمی خواد
نقل قول: اتصال DataGrid به بانک Sql
اینو چک کن
SqlConnection sqlcon = newSqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\db\\Database1.mdf;Integrated Security=True;User Instance=True");
DataTable ds = new DataTable();
SqlDataAdapter sqldc = new SqlDataAdapter();
sqldc.SelectCommand = new SqlCommand();
sqldc.SelectCommand.Connection = sqlcon;
sqldc.SelectCommand.CommandText = aSP_Select_LegalName;
sqldc.SelectCommand.CommandType =
CommandType.StoredProcedure;
sqlcon.Open();
sqldc.SelectCommand.ExecuteNonQuery();
sqldc.Fill(ds);
if (ds.Rows.Count > 0)
{
dg1.DataContext = ds.DefaultView;
}
نقل قول: اتصال DataGrid به بانک Sql
نقل قول:
و بعد از آن به تعداد رکوردهای فیلد موردنظر رکورد اضافه می کند اما به شکل زیر :
این خط رو قبل از سطر آخر اضافه کن
DataGrid1.AutoGenerateColumns = True
نقل قول: اتصال DataGrid به بانک Sql
نقل قول:
نوشته شده توسط
Mehdi550u
از Linq to sql استفاده کنید اینم مثال بسیار ساده
درضمن "{ItemsSource="{Binding هم نمی خواد
در پروژه ی شما یک textBox اضافه کردم و تو textChanged نوشتم
private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
var q = from a in Db.Tests
where a.FirstName.Contains(textBox1.Text)
select a;
dataGrid1.ItemsSource = q;
}
تو برنامه شما کاملا سرچ رو درست انجام میده و با پاک شدن textBox دوباره تمام رکوردها نشون داده میشه
ولی عین همین رو تو برنامه ی خودم استفاده کردم به محض وارد کرد اولین کاراکتر در textBox رکوردها میرن و دقیقا همون مشکل اول این تاپیک پیش میاد!
لطفا راهنمایی کنید
نقل قول: اتصال DataGrid به بانک Sql
مهندس آخر اینو تست کردی ؟
نقل قول:
نوشته شده توسط
ashkan209
این خط رو قبل از سطر آخر اضافه کن
DataGrid1.AutoGenerateColumns = True
نقل قول: اتصال DataGrid به بانک Sql
بله این گزینه از اول true بود
داشتم نمونه برنامه ی جناب Mehdi550u رو می دیدم! تو propreties دیتاگریدها یه تفاوت هایی وجود داشت! مثلا مال من Itemsource تو لیستش نبود البته از طریق کد میشه ازش استفاده کرد. ممکنه ایراد از Datagird باشه؟ از کجا میشه فهمید؟
نقل قول: اتصال DataGrid به بانک Sql
نقل قول:
نوشته شده توسط
Shahab_H
بله این گزینه از اول true بود
داشتم نمونه برنامه ی جناب
Mehdi550u رو می دیدم! تو propreties دیتاگریدها یه تفاوت هایی وجود داشت! مثلا مال من Itemsource تو لیستش نبود البته از طریق کد میشه ازش استفاده کرد. ممکنه ایراد از Datagird باشه؟ از کجا میشه فهمید؟
سلام
فایل برنامت رو ضمیه کن ببینم
و درضمن در روشی که من مثال زدم اصلا احتیاجی به تنظیم ItemsSource در دیتا گردید ندارید
اما اگه میخواید DataGrid1.AutoGenerateColumns = True باید برای هرکدوم از فیلدهایی که در دیتا گرید دارید Binding درست کنید
<Custom:DataGridTextColumn Binding="{Binding LastName}" CanUserReorder="False" CanUserResize="False" CanUserSort="False" FontFamily="Tahoma" Header="نام خانوادگی" IsReadOnly="True" Width="150" />
نقل قول: اتصال DataGrid به بانک Sql
نقل قول:
نوشته شده توسط
Mehdi550u
سلام
فایل برنامت رو ضمیه کن ببینم
و درضمن در روشی که من مثال زدم اصلا احتیاجی به تنظیم ItemsSource در دیتا گردید ندارید
اما اگه میخواید DataGrid1.AutoGenerateColumns = True باید برای هرکدوم از فیلدهایی که در دیتا گرید دارید Binding درست کنید
<Custom:DataGridTextColumn Binding="{Binding LastName}" CanUserReorder="False" CanUserResize="False" CanUserSort="False" FontFamily="Tahoma" Header="نام خانوادگی" IsReadOnly="True" Width="150" />
من false رو هم امتخان کردم
کدم دقیقا مثل مثال شماست ولی تو برنامه شما کاملا درست کار می کنه ولی تو برنامه ی خودم نه
ممنون از توجهتون:لبخندساده:
فقط به خاطر تصاویر حجمش بالاست اگر داونلودش براتون سخته لطفا بگین تصویرها رو بردارم
بازم ممنون
http://www.4shared.com/file/bu5n0Fy3/Accounting.html
نقل قول: اتصال DataGrid به بانک Sql
سلام
من کدها رو دیدم مشکل شما در جستجو کاربر هاست؟؟
شما کدهارو خیلی پیچوندید
اگه مشکل در همین قسمت هست که من گفتم
بگید تا کدها رو براتون اصلاح کنم
روشی که بکار بردید از نظر من زیاد مناسب نیست
نقل قول: اتصال DataGrid به بانک Sql
نقل قول:
نوشته شده توسط
Mehdi550u
سلام
من کدها رو دیدم مشکل شما در جستجو کاربر هاست؟؟
شما کدهارو خیلی پیچوندید
اگه مشکل در همین قسمت هست که من گفتم
بگید تا کدها رو براتون اصلاح کنم
روشی که بکار بردید از نظر من زیاد مناسب نیست
نمی دونم چطور تشکر کنم که انقدر وقت می ذارید:لبخندساده:
مشکل اصلی اینه که بعد سرچ تو دیتا گرید سطرها خالی نشون داده میشه شبیه پست اول همین تاپیک! ولی خیلی خوشحال مشیم شیوه ی بهتر جستوجو رو هم بهم بگین:چشمک:
نقل قول: اتصال DataGrid به بانک Sql
سلام
سعی مکیکنم تا فردا نمونه مناسب رو بهتون بدم
نقل قول: اتصال DataGrid به بانک Sql
خیلی خیلی لطف می کنید:لبخندساده:
نقل قول: اتصال DataGrid به بانک Sql
سلام
ببخشید کمی تاخیر داشتم
قسمت جستجو رو نگاه کنید من کدهای اضافی دیگه رو حذف کردم تا فقط کدهای جستجو را ببیند
به تعریف دیتا گرید هم در کد Xaml دقت کنید
البته پیشنهاد میکنم اطلاعات را درون یک لیست بریزید و از در اون آن عمل جستجو را انجام دهید تا ارتباط شما با دیتابیس قطع باشد
http://www.4shared.com/file/yF5XBNnX/Accounting.html
نقل قول: اتصال DataGrid به بانک Sql
خیلی خیلی خیلی طف کردین واقعا ممنونمو شرمنده
امیدوارم بتونم جبران کنم:لبخندساده:
نقل قول: اتصال DataGrid به بانک Sql
سلام بهتر دیدم در همین تاپیک مشکلم رو توضیح بدهم .
یک DataGrid دارم که ارتباط با بانکم را به صورت زیر برقرار می کنم .
در Xaml
<DataGrid Name="dtgStuff" AutoGenerateColumns="False" ItemSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Stuff_Name}" Header="نام" IsReadOnly="True" />
<DataGridTextColumn FontFamily="B Nazanin" FontSize="14" Header="تعداد کل" />
</DataGrid.Columns>
</DataGrid>
در Code
dtgStuff.DataContext= ...(DatatTble)...
حالا وقتی ارتباط برقرار می شود مشکلی نیست و ستون مربوط به نام را میاره ولی تعداد کل را می خواهم خودم وارد کنم ولی وقتی اطلاعات را وارد می کنم و LostFocus می شود اطلاعات مربوط به تعداد کل پاک می شود .
به نظرم به خاطر ارتباط با DataGrid ، اما وقتی ItemSource را پاک می کنم اصلا ارتباط برقرار نمی شود .
نقل قول: اتصال DataGrid به بانک Sql
سلام
چرا دیتا تیبل؟؟
از Linq استفاده کن
مثال منو ببین
مشکلت حل میشه
ItemSource="{Binding هم نمیخواد
نقل قول: اتصال DataGrid به بانک Sql
متاسفانه از ابتدا از این روش استفاده نکرده ام . دیگه وسط کار نمیتونم تغییرات را اعمال کنم .
نقل قول: اتصال DataGrid به بانک Sql
مشه نمونه کدت رو ببینم؟
برام میل کن
نقل قول: اتصال DataGrid به بانک Sql
مشکل برطرف شد . در ستونهای که به DataTable متصل نیست از کد زیر استفاده کردم .
<DataGridTextColumn Binding="{Binding Path=A,Mode=TwoWay}"/>
که این A به جای متصل نیست .
نقل قول: اتصال DataGrid به بانک Sql
مشکلات پشت هم داره میاد .
بنده در DataTable ام دو ستون دارم که دو ستون DataGrid راپرمیکنه ولی DataGridام 7ستون داردکه 5 ستونشو خودم پر می کنم .
DataTable1.Columns.Add("Stuff_Name");
DataTable1.Columns.Add("Stuff_Qty");
.
.
.
DataGrid1.DataContext=DataTable1;
وبا کد زیر می توان مقدار DataGrid را به دست آورد .
string ID = ((DataRowView)(this.DataGrid1.CurrentItem)).Row.It emArray[1].ToString();
و یا از کد زیر :
string value = ((TextBlock)DataGrid1.SelectedCells[1].Column.GetCellContent(DataGrid1.SelectedCells[0].Item)).Text;
ولی وقتی ازش استفاده می کنم فقط 2 تا ستون که با DataTable تعریف کردم را فقط میشناسه!
بعد DataTable به صورت زیر تغییر دادم :
DataGrid1.Columns.Add("Stuff_Name");
DataGrid1.Columns.Add("Stuff_Qty");
DataGrid1.Columns.Add("Stuff_CoffeeQty");
DataGrid1.Columns.Add("Stuff_SaleCost");
DataGrid1.Columns.Add("Stuff_BuyCost");
DataGrid1.Columns.Add("Stuff_Cost");
DataGrid1.Columns.Add("Stuff_ID");
در Xaml :
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Stuff_Name}"/>
<DataGridTextColumn Binding="{Binding Stuff_Qty,Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Stuff_CoffeeQty,Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Stuff_SaleCost,Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Stuff_BuyCost,Mode=TwoWay}"/>
<DataGridTextColumn Binding="{Binding Stuff_Cost,Mode=TwoWay}" />
<DataGridTextColumn Binding="{Binding Stuff_ID}" />
</DataGrid.Columns>
اما مقادیرش تغییر نمی کنه ! این Mode=TwoWay چرا کار نمی کنه ؟
:گریه: :عصبانی++: :گریه: :عصبانی++: :گریه:
نقل قول: اتصال DataGrid به بانک Sql
لطفا کمک کنید !
به چه صورتی اصلا میشه با برنامه نویس سطر اضافه کرد !
نقل قول: اتصال DataGrid به بانک Sql
مشکل حل شد فقط کد زیر رابه یک Grid اختصاص دادم
dtgStuff.DataContext= ...(DatatTble)...
ضمنا برای به دست آوردن سلول خاصی در DataGrid از کد زیر استفاده کردم !
MessageBox.Show(((DataRowView)DataGrid1.Items[i]).Row[j].ToString());