PDA

View Full Version : یک سوال راجع به DataGrid



فاطمه هاشمیان
یک شنبه 15 خرداد 1384, 18:49 عصر
من یک DataGird به فرمی اضافه کردم و مثلا" Width ستون توضیحات آن را در Property TableStyle عدد 100 تعریف کردم اما ممکن متنهایی که در این ستون قرار میگیرند بیشتر از 100Pixel احتیاج داشته باشند میخوام اگر این حالت بود وقتی موس روی آن فیلد از DataGrid میرود مثل toolTip کل متن این فیلد ظاهر شود ممنون میشم اگر راهنمایی کنید به چه صورت میتوانم این کار را انجام بدم ؟؟

RezaJP
یک شنبه 15 خرداد 1384, 20:42 عصر
میتونی تو رویداد MouseHover مقدار اون سلول خاص رو بگیری بعدش با توابعی که موجوده طولشو با مقدار Width اون
Column مقایسه کنی و اگه بزرگتر بود با Tooltip نشون بدی :موفق:

RezaJP
یک شنبه 15 خرداد 1384, 21:06 عصر
البته یادم رفت بگم
اندازه string رو با MeasureString بگیر که یک رشته و فونت میگیره و مقدار یازگشتیش از نوع sizeF هست که یک structure هست که یک height و یک width داره
این تابع (MeasureString) از کلاس Graphics است که با کد زیر میتونی ایجاد کنی




Graphics g = this.CreateGraphics();

sizeF s=g.MeasuerString(str,f);

فاطمه هاشمیان
دوشنبه 16 خرداد 1384, 00:02 صبح
از راهنماییتون بسیار ممنونم :) اما وقتی من این کد رو نوشتم 2 تا مشکل پیدا کردم اول اینکه وقتی ToolTip را میخوام Set کنم از من یه Control میخواد که من DataGird را دادم و این toolTip را در کل ستونهای DataGrid نمایش میدهد ام من میخوام توی اون فید خاص که متنش زیاد است نمایش بدهد و یه چیز دیگه وقتی میخوام متن مورد نظر برای نمایش در toolTip را بدم[0][dataGrid1.CurrentRowIndex]این دستور متنی رو که در فیلد مربوط ستون شماره 0 و سطری که نشانگر dataGrid کنار آن است نمایش میدهد نه فیلد مربوط به ستون شماره 0 وسطری که موس روی آن است. :گیج: ممنون میشم اگر در این مورد راهنماییم کنید

if(this.dataGrid1.TableStyles[0].GridColumnStyles ["city_u"].Width != s.Width)
toolTip1.SetToolTip(this.dataGrid1/*.CurrentCell*/,this.dataSet11.User_tbl[dataGrid1.CurrentRowIndex .CurrentCell.RowNumber][0].ToString());

RezaJP
دوشنبه 16 خرداد 1384, 00:48 صبح
میتونی از این استفاده کنی



private void dataGrid1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{


int columnNumber=dataGrid1.HitTest(e.X,e.Y).Column;
int rowNumber=dataGrid1.HitTest(e.X,e.Y).Row ;
if(dataGrid1.HitTest(e.X,e.Y).Column==4)
try
{

if(g.MeasureString(dataGrid1[rowNumber,columnNumbe r].ToString(),dataGrid1.Font ).Width>dataGrid1.TableStyles[0].GridColumnStyles[4].Width )
toolTip1.SetToolTip(dataGrid1,dataGrid1[rowNumber, columnNumber].ToString());
else
toolTip1.SetToolTip(dataGrid1,"");
}
catch
{

}
else
toolTip1.SetToolTip(dataGrid1,"");




}

البته باید g رو global تعریف کنی و نیز:



private void Form1_Load(object sender, System.EventArgs e)
{

g=this.CreateGraphics();
}

سار
دوشنبه 16 خرداد 1384, 03:05 صبح
این خیلی جالب بود :flower:
هم ایده برای این کار جالب بود و هم کار رضا جان

فاطمه هاشمیان
دوشنبه 16 خرداد 1384, 09:16 صبح
خیلی خوب بود ممنونم :تشویق: