PDA

View Full Version : سوال: پر کردن تکست باکس ها با کلیک روی دیتاگرید



hercool
چهارشنبه 02 بهمن 1392, 19:30 عصر
سلام دوستان
یه مشکل در رابطه با دیتاگرید دارم
اونم این هست که من می خوام با کلیک کردن روی یک سطر مقادیر ستونهای اون سطر داخل تکست باکس های داخل فرم پر بشه
اطلاعات را از دیتابیس می گیرم

<Window x:Class="wpfstart.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid Name="datagridtest" HorizontalAlignment="Left" Margin="29,53,0,0" VerticalAlignment="Top" Height="224" Width="278" AutoGenerateColumns="False" AlternatingRowBackground="Beige" MouseDoubleClick="datagridtest_MouseDoubleClick">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding codenoskhebimar}" Width="100" Header="کد نسخه"/>
<DataGridTextColumn Binding="{Binding idbimar}" Width="100" Header="شناسه بیمار"/>

</DataGrid.Columns>

</DataGrid>
<TextBox x:Name="idbimar" HorizontalAlignment="Left" Height="22" Margin="337,83,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="160"/>
<TextBox Name="codenoskhebimar" HorizontalAlignment="Left" Height="23" Margin="337,120,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="160"/>


</Grid>
</Window>

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
filldata();
}
public void filldata()
{
string comstring = string.Empty;
string strconection = "Data Source=MASOUD;Initial Catalog=darokhane;Integrated Security=True";
using (SqlConnection con = new SqlConnection(strconection))
{
comstring = "select * from noskhe";
SqlCommand cmd = new SqlCommand(comstring, con);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("noskhe");
ada.Fill(dt);
datagridtest.ItemsSource = dt.DefaultView;
}

}
هر کدی را امتحان کردم جواب نگرفتم ممنون میشم راهنماییم کنید
چه اینجا چه سایت codeprojectو stackoverflow راه حلی برای مشکل من نبود چون از دیتابیس اطلاعات گرفتم

hercool
پنج شنبه 03 بهمن 1392, 14:01 عصر
سلام من راه های زیادی رو امتحان کردم و همشون مشکل داشتن اکثر اونها مشکلشون اینه که اطلاعات مثلا فیلد ای دی رو با نوع ابجکت نشون میدن
مثلا
system.windows.controls.textbox: 1001
در صورتی که من می خوام فقط مقدار 1001 رو بگیرم
نمونه کد ها رو میزارم
اول:
var firstSelectedCellContent = this.dgEmp.Columns[0].GetCellContent(this.dgEmp.SelectedItem);
var firstSelectedCell = firstSelectedCellContent != null ? firstSelectedCellContent.Parent as DataGridCell : null;
دوم:
var cellInfo = dgEmp.SelectedCells[0];
var content = cellInfo.Column.GetCellContent(cellInfo.Item);
سوم:
DataRowView dataRow = (DataRowView)dgEmp.SelectedItem;
int index = dgEmp.CurrentCell.Column.DisplayIndex;
string cellValue = dataRow.Row.ItemArray[index].ToString();
چهارم:
var cellInfos = dgEmp.SelectedCells;
List<string> list1 = new List<string>();

foreach (DataGridCellInfo cellInfo in cellInfos)
{
if (cellInfo.IsValid)
{
//GetCellContent returns FrameworkElement
var content = cellInfo.Column.GetCellContent(cellInfo.Item);

//Need to add the extra lines of code below to get desired output
DataRowView row = (DataRowView)content.DataContext;//get the datacontext from FrameworkElement and typecast to DataRowView
object[] obj = row.Row.ItemArray;//ItemArray returns an object array with single element
list1.Add(obj[0].ToString());//store the obj array in a list or Arraylist for later use
}
}
MessageBox.Show(list1[0].ToString());
پنجم:
string iii = dgEmp.Columns[0].GetCellContent(dgEmp.Items[dgEmp.SelectedIndex]).ToString();
MessageBox.Show(iii);
ششم:
public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column)
{
if (row != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);

if (presenter == null)
{
grid.ScrollIntoView(row, grid.Columns[column]);
presenter = GetVisualChild<DataGridCellsPresenter>(row);
}

DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.Con tainerFromIndex(column);
return cell;
}
return null;
}
تابع دوم:
public static T GetVisualChild<T>(Visual parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
اینم قسمت بدست اوردن سطر برای گذاشتن در تابع اول
DataGridRow row = (DataGridRow)dgEmp.ItemContainerGenerator.Containe rFromItem(dgEmp.SelectedItem);

ممنون میشم یکی از دوستان راهنماییم کنه هر چی می گردم مشکلم حل نمیشه

rg_BlackRose
دوشنبه 05 اسفند 1392, 17:51 عصر
سلام


من 2 تا راه حل ساده رو براتون پيشنهاد ميکنم.(اميدوارم که منظورتون رو درست متوجه شده باشم)

راه حل اول :

شما براي نمايش اطلاعات ستون انتخاب شده از DataGrid در TextBox ها اونها(TextBox ها) رو درون يک StackPanel يا هر کنترل کانتينري که به کارتون بياد قرار بديد و اون رو نام گذاري بکنید(من TextBoxesContent نامگذاری کردم) و خاصيت Text
(TextBox ها) رو به اين صورت تنظيم بکنيد.(بايند بکنيد)



<StackPanel Name="TextBoxesContent" >
<TextBox Name="txtidbimar" TextWrapping="Wrap" Text="{Binding Path=idbimar}" Width="120" Margin="0,0,0,3"/>
<TextBox Name="txtcodenoskhebimar" TextWrapping="Wrap" Text="{Binding Path=codenoskhebimar}" Width="120"/>
</StackPanel>



حالا براي رويداد MouseDoubleClick ديتاگريد(DataGrid) اين کد رو قرار بديد.



TextBoxesContent.DataContext = datagridtest.SelectedItem;



راه حل دوم :

کافیه در رویداد MouseDoubleClick ديتاگريد(DataGrid) اين کد رو قرار بديد.


System.Data.DataRowView row = dgv.SelectedItem as System.Data.DataRowView;
txtcodenoskhebimar.Text = row["codenoskhebimar"].ToString();
txtidbimar.Text = row["idbimar"].ToString();


نتونستم نمونه برنامه رو آپلود کنم(در اولین فرصت قرار میدم)

موفق باشید.

ali_general
جمعه 14 اسفند 1394, 04:28 صبح
ببخشید من یه سوال داشتم در مورد این قسمت

منظور از قسمت های آبی تو کوتیشن نام ستون هست که تو گردی نمایش میده؟یا نام فیلد تو دیتا بیس؟من هر دوتاش رو گذاشتم ولی error میده

سیدسبحان
جمعه 14 اسفند 1394, 04:50 صبح
ببخشید من یه سوال داشتم در مورد این قسمت

منظور از قسمت های آبی تو کوتیشن نام ستون هست که تو گردی نمایش میده؟یا نام فیلد تو دیتا بیس؟من هر دوتاش رو گذاشتم ولی error میده


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

AbbasSediqi
یک شنبه 01 فروردین 1395, 10:21 صبح
برادر راه ساده تری هم وجود داره و اون اینه

textbox.text==DataGrid.CurrentCell.Item(1)

اون یک در item برای ستونیه که داده مورد نظر وجود داره

برای هر کدوم از همین روش استفاده کن