View Full Version : سوال: به چه شکل به جای کل کلمه ... گذاشت؟
fakhravari
یک شنبه 01 آبان 1390, 00:26 صبح
با سلام
دوستان اگر کمک کنید ممنون میشم:لبخند:
Alfred188
یک شنبه 01 آبان 1390, 10:08 صبح
سلام،
ببین این کد به دردت می خوره!
(البته اگه سوالت رو درست متوجه شده باشم!)
if(data.length>=100)
label.Text=data.SubString(0,100)+"...";
else
label.Text=data;
moferferi
یک شنبه 01 آبان 1390, 10:35 صبح
سلام.
نمیدونم سوال را درست متوجه شده باشم یا نه.
ولی کلا در صفخات html قرار دادن ... یا همون سه نقطه اشتباهه.باید از معادل کد html اون استفاده کرد
…
fakhravari
یک شنبه 01 آبان 1390, 11:30 صبح
با سلام
مثال
متن بزرگ مثال همین قسمت نقل قول برنامه نویس که اگه متن بزرگی داشتید به جاش ... میزاره
_____________
Alfred188 عزیز در مورد کد بالا قسمت data توضیح بدین:متفکر:
________________
داده های من درون گرید ویو هستند مثال قسمت تیتر اخبار ها
Z_Bagheri
یک شنبه 01 آبان 1390, 15:11 عصر
76955
این کد دقیقا کاری رو که می خواهید انجام میده
Z_Bagheri
یک شنبه 01 آبان 1390, 15:13 عصر
مثلا می تونید متن کامل رو در tooltip نمایش بدید و ده حرف اول بعلاوه ی ...رو به عنوان متنی که در گرید ویو نمایش داده میشه با این تابع به شکل زیر استفاده کنید
<asp:Label ID="Label3" runat="server" ToolTip='<%# Eval("body") %>' Text='<%# AbstractIt( Eval("body"),50) %>'></asp:Label>
Alfred188
یک شنبه 01 آبان 1390, 15:16 عصر
_____________
Alfred188 عزیز در مورد کد بالا قسمت data توضیح بدین:متفکر:
________________
string data="your string";
تو شرط میاد بررسی می کنه که اگه طول string بیشتر از 100 (یا هرچی) بود بیا و تو textbox فقط 0 تا 100 رو نشون بده! اگه هم که کمتر بود همشو نمایش بده!
موفق باشید
fakhravari
یک شنبه 01 آبان 1390, 21:48 عصر
با سلام
این کد جواب میده
if(data.length>=100)
label.Text=data.SubString(0,100)+"...";
else
label.Text=data;
خوب حالا به چه شکل لونو بدم به گرید ویو
من از این روش استفاده میکنم
FM f = new FM();
GridView1.DataSource = f.GetListCategory();
GridView1.DataBind();
asif1358
یک شنبه 01 آبان 1390, 22:26 عصر
سلام
ببخشید این مثال خوبه ولی یک عیبی داره و آن اینه که گاهی کلمات را از وسط قطع می کنه؛ بهتره آن را کمی تکمیل کرده و آخرین space را در آن محدوده پیدا کرده بعد برش را انجام دهیم
Saman Hashemi
دوشنبه 02 آبان 1390, 08:12 صبح
وقتی دارید اطلاعات داخل گرید میریزید در هر Row اطلاعات اون Cell که میخوایی بشکه به تابع بفرست تا برات درستش کنه...!
fakhravari
دوشنبه 02 آبان 1390, 15:17 عصر
مشکل حل شد کد برای دوستان
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
string data = "";
Label l2 = (Label)row.Cells[0].FindControl("Label3");
data = l2.Text;
if (data.Length >= 20)
{
l2.Text = data.Substring(0, 20 ) + " ... ";
}
else
{
l2.Text = data;
}
}
}
mehdi.mousavi
دوشنبه 02 آبان 1390, 15:42 عصر
سلام.
کد شما، ارتباطی به سوالی که پرسیده بودید، نداره. سوال شما این بود: "به چه شکل به جای کل کلمه ... گذاشت؟" که کد پست قبلی چنین کاری نمیکنه. کد شما فقط 20 کاراکتر اول رشته رو برمیداره و از همونجا بقیه رشته رو قطع می کنه و در انتهاش ... اضافه میکنه. ضمن اینکه برای چنین کاری، نیازی نیست تا RowDataBound رو بگیرید تا به Label3 برسید. جای این کار، میتونید ابتدا یک Extension Method بدین شکل به برنامه اضافه کنید:
public static class StringEx
{
public static string GetWordMarginSubString(this string str, string separator, int maxChars)
{
if (string.IsNullOrEmpty(str))
return string.Empty;
int i = maxChars;
if (str.Length > maxChars)
{
if (str[maxChars] != 32)
for (; i >= 0 && str[i] != 32; i--) ;
str = str.Substring(0, i) + separator;
}
return str;
}
}
بدین ترتیب، به کلیه string های موجود در برنامه شما، متود GetWordMarginSubString اضافه میشه. حالا، میتونید در همون فایل ASPX و بصورت Declarative، از این تابع برای جایگزینی کل کلمه به Separator مورد نظر استفاده کنید:
<asp:Label ID="label3" runat="server" Text='<%#((MyClass)Container.DataItem).Whatever.GetWordMa rginSubString("...", 20)%>'></asp:Label>
گذشته از اینها، اگر مایلید تا از RowDataBound استفاده کنید، باید بدونید که RowDataBound بازای هر یک از Row های Grid یکبار Call میشه، پس نیازی نیست (و نباید) در یک Loop کل Row ها رو پیمایش کنید و ... در هر حال، تابع فوق، عبارت مورد نظر رو بررسی میکنه، اگر طولش بیش از مقدار مورد نظر بود، بر اساس اینکه کلمه کجای عبارت تموم شده (جایگاه Space در عبارت) کلمه رو بصورت کامل میندازه و string مورد نظر رو (فرضا ... رو) به رشته الصاق میکنه.
موفق باشید.
fakhravari
دوشنبه 02 آبان 1390, 15:50 عصر
بله سوالم یکم اشتباه طرح کردم
باید بنوشتم همان 30 کارکتر اول و بعد ...
خوب از دستور foreach (GridViewRow row in GridView1.Rows) استفاده نکنید و GridView1.Rows[0].Cells[0]
استفاده کنید
ممنون از mehdi.mousavi
fakhravari
دوشنبه 02 آبان 1390, 15:58 عصر
با سلامmehdi.mousavi
من کلاس شما رو ساختم خوب حالا برای دسترسی و دیتابایند کردن به چه شکل استفاده کنم
شما گفتید
<asp:Label ID="label3" runat="server" Text='<%#((MyClass)Container.DataItem).Whatever.Ge tWordMarginSubString("...", 20)%>'></asp:Label>
به جای MyClass باید طبق دستور کلاس گذاشت =StringEx
خوب بعد به چه شکل مثال فیلد name فرا خونی کنیم؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.