PDA

View Full Version : lمشکل تغییر اندازه سلول دیتا گرید در زمان runtim



lomir
جمعه 29 اردیبهشت 1385, 15:42 عصر
سلام
من می خوام در زمان اجرا برنامه ..اندازه فضای ستون ها را با مقدار سلول ها fit کنه
مثلا اگه فیلد name= ali باشه فضای ستون name به اندازه 3 کارکتر به آن تخصیص داده بشه ....
یا هر اندازه که تو سلول ها مقدار باشه مقدار بصورت fit در بیاره که دیتا گرید فضای کمتری اشغال کنه
اگه می دونید لطفا کمکم کنید ........

javid_p84
جمعه 29 اردیبهشت 1385, 19:58 عصر
نحوه ی بدست آوردن اندازه string

Dim g As Graphics = Me.CreateGraphics
Dim MyString As String = "Test"
Dim fnt As Font = Me.Font
MsgBox(g.MeasureString(MyString, fnt).Width.ToString)
MsgBox(g.MeasureString(MyString, fnt).Height.ToString)

بعدش هم مثلا :
colName.width=g.MeasureString(dr("Name"), fnt).Width

lomir
جمعه 29 اردیبهشت 1385, 21:15 عصر
این چیه من چکار اندازه string دارم ....
منظورتو نفهمیدم .... میشه کامل تر توضیح بدی
من data grid رو این توری fill کردم بر اساس این بهم بگو
dDataset.Clear()
If con.State <> ConnectionState.Open Then con.Open()
Dim Adapt1 As New OleDb.OleDbDataAdapter("Select *From tbl_cd ", con)
Adapt1.Fill(dDataset, "tbl_cd")
dg.DataBindings.Add(New Binding("datasource", dDataset, "tbl_cd"))
If con.State <> ConnectionState.Closed Then con.Close()

Catch ex As Exception

End Try

javid_p84
شنبه 30 اردیبهشت 1385, 12:50 عصر
سلام
برای این کاری که میخوایید انجام بدید باید ماکزیمم طول رشته رو در فیلد مورد نظرت پیدا کنی
مثلا اگه دو مقدار علی و علیرضا در رکوردهات موجود باشه ، قاعدتا باید طول سلول دیتا گرید
برای اندازه ی علیرضا مناسب باشه....
این کار رو میتونی با استفاده از یک حلقه انجام بدی و توش با استفاده از کدی که برات نوشتم
ماکزیمم طول رو پیدا کنی :
dim maxLen as integer=0
for each dr as datarow in dDataset.tbl_cd.rows
if g.MeasureString(dr("Name"), fnt).Width>max then
max= g.MeasureString(dr("Name"), fnt).Width
end if
اینطوری ماکزیمم رو پیدا میکنی.
بعد مثلا میای نگاه میکنی ببینی که این فیلد Name توی دیتا گرید روی کدوم یک از
DataGridTextBoxColumn هست!! اگه خودت تعریف نکردی از قسمت Windows Form Designer generated code میتونی نگاه کنی که اسمش چی هست.
مثلا ColName اگه باشه اونوقت مینویسی :
colName.Width=max

به همین سادگی !!
البته کدهای بالا رو آنلاین و عجله ای نوشتم ولی به هر حال برای راهنمایی باید کافی باشه
اگه یه کم سعی کنی حتما موفق میشی....
موفق باشید

ali_kolahdoozan
شنبه 30 اردیبهشت 1385, 13:05 عصر
توجه کنید شما باید ماکزیمم طول ستونها رو برای بیشترین رکورد بدونید یا کلا به اندازه طول آن فیلد جا بزارید . نمی توانید برای هر رکورد یک طول تعریف کنید . به نظر من قبل از اجرا این وضعیت رو مشخص کنید . نهایتا به کاربر اجازه بدید در موقع اجرا با موس عرض ستونها رو دستکاری کنه

RezaJP
شنبه 30 اردیبهشت 1385, 16:02 عصر
به نظر من این روش جالب نمی تونه باشه که بیاییم عرض ستون ها را به اندازه طول رشته قرار بدیم ، چون اولا یک اسکرول بار افقی ایجاد میشه ثانیا اگر طوا رشته باشه خیلی زیبا نخواهد بود
راه حل بهتر اینه که عرض ستون یک مقدار معقولی باشه اما اگر طول رشته بیشتر بود با تول تیپ نشون بدیم
البته بهتره که عرض ستون به حدی باشه که کمتر این مورد پیش بیاد

lomir
شنبه 30 اردیبهشت 1385, 18:50 عصر
به نظرت کاره جالبی که برای هر ستون یه حلقه for بنویسیم .....
با عقل جور در نمی یاد ....
اجرا رو کند می کنه ........................ کاره جالبی نیست

سلام
برای این کاری که میخوایید انجام بدید باید ماکزیمم طول رشته رو در فیلد مورد نظرت پیدا کنی
مثلا اگه دو مقدار علی و علیرضا در رکوردهات موجود باشه ، قاعدتا باید طول سلول دیتا گرید
برای اندازه ی علیرضا مناسب باشه....
این کار رو میتونی با استفاده از یک حلقه انجام بدی و توش با استفاده از کدی که برات نوشتم
ماکزیمم طول رو پیدا کنی :
dim maxLen as integer=0
for each dr as datarow in dDataset.tbl_cd.rows
if g.MeasureString(dr("Name"), fnt).Width>max then
max= g.MeasureString(dr("Name"), fnt).Width
end if
اینطوری ماکزیمم رو پیدا میکنی.
بعد مثلا میای نگاه میکنی ببینی که این فیلد Name توی دیتا گرید روی کدوم یک از
DataGridTextBoxColumn هست!! اگه خودت تعریف نکردی از قسمت Windows Form Designer generated code میتونی نگاه کنی که اسمش چی هست.
مثلا ColName اگه باشه اونوقت مینویسی :
colName.Width=max

به همین سادگی !!
البته کدهای بالا رو آنلاین و عجله ای نوشتم ولی به هر حال برای راهنمایی باید کافی باشه
اگه یه کم سعی کنی حتما موفق میشی....
موفق باشید

lomir
شنبه 30 اردیبهشت 1385, 19:02 عصر
به نظرت چند باشه خوبه ...
می تونی سورس بدی ؟
یادمه تو vb2003 پهنا رو 0 می دادی اتو خودش بر اساس بزرگترین طول سلول پنها رو تخصیص می داد ....
البته در زمان اجرا تعیین این کارو بلد نیستم اگه می تونی یه سورس برام بزار


به نظر من این روش جالب نمی تونه باشه که بیاییم عرض ستون ها را به اندازه طول رشته قرار بدیم ، چون اولا یک اسکرول بار افقی ایجاد میشه ثانیا اگر طوا رشته باشه خیلی زیبا نخواهد بود
راه حل بهتر اینه که عرض ستون یک مقدار معقولی باشه اما اگر طول رشته بیشتر بود با تول تیپ نشون بدیم
البته بهتره که عرض ستون به حدی باشه که کمتر این مورد پیش بیاد

RezaJP
شنبه 30 اردیبهشت 1385, 23:11 عصر
0 بدی که hidden میشه
بستگی به فیلدت داره که عرض رو چقدر بگیری ...
تست کن ببین چقدر خوبه ... معمولا برای نام و نام خانوادگی با هم 120 تا 150 میگیرن

RezaJP
شنبه 30 اردیبهشت 1385, 23:15 عصر
من وقت ندارم سورسشو برات بنویسم خودت فکر کن روش اگه مشکلی بود بپرس

lomir
یک شنبه 31 اردیبهشت 1385, 16:20 عصر
وقتت برای خودت خودم پیداش کردم .... علاج کار نوشتن این کد بود .... دیگه نیازی به نوشتن حلقه for این حرفا رو نداره ..... واقعا fit‌ می کنه :D
dg.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeade r
dg.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
dg.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeade r
dg.Columns(8).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeade r



من وقت ندارم سورسشو برات بنویسم خودت فکر کن روش اگه مشکلی بود بپرس

RezaJP
یک شنبه 31 اردیبهشت 1385, 18:15 عصر
خیلی جالب نیست حرفت "وقتت برای خودت"
البته این فقط توی 2005 کار میکنه

lomir
یک شنبه 31 اردیبهشت 1385, 18:56 عصر
زود رنج نباش کا .... با ببخشین کارت راه می افته
اتفاقا من 2005 کار می کنم ....

خیلی جالب نیست حرفت "وقتت برای خودت"
البته این فقط توی 2005 کار میکنه

RezaJP
یک شنبه 31 اردیبهشت 1385, 20:51 عصر
نو پرابلم کاااااااا
توی 2005 کارها راحت تر شده
موفق باشی