রিপিটার শিরোনাম বা পাদলেখগুলিতে কীভাবে নিয়ন্ত্রণগুলি সন্ধান করবেন


120

আমি ভাবছিলাম যে কেউ কীভাবে একটি Asp.Net রিপিটার নিয়ন্ত্রণের হেডারটেম্পলেট বা পাদদেশের নিয়ন্ত্রণগুলি খুঁজে পাবে।

আমি তাদের আইটেমডেটাবাউন্ড ইভেন্টে অ্যাক্সেস করতে পারি, তবে কীভাবে কীভাবে সেগুলি পাব তা আমি ভাবছিলাম (উদাহরণস্বরূপ শিরোলেখ / পাদলেখের ইনপুটটির মান পুনরুদ্ধার করার জন্য)।

দ্রষ্টব্য: আমি উত্তরটি সন্ধানের পরে এই প্রশ্নটি এখানে পোস্ট করেছি যাতে এটি আমার মনে পড়ে (এবং সম্ভবত অন্যান্য ব্যক্তিরা এটি দরকারী বলে মনে করতে পারেন)।

উত্তর:


174

মন্তব্যে উল্লিখিত হিসাবে, এটি আপনার পুনরায়কারের ডেটাবাউন্ডের পরে কেবল কাজ করে।

শিরোনামে একটি নিয়ন্ত্রণ সন্ধান করতে :

lblControl = repeater1.Controls[0].Controls[0].FindControl("lblControl");

একটি নিয়ন্ত্রণ জন্য পাদচরণ :

lblControl = repeater1.Controls[repeater1.Controls.Count - 1].Controls[0].FindControl("lblControl");

এক্সটেনশন পদ্ধতি সহ

public static class RepeaterExtensionMethods
{
    public static Control FindControlInHeader(this Repeater repeater, string controlName)
    {
        return repeater.Controls[0].Controls[0].FindControl(controlName);
    }

    public static Control FindControlInFooter(this Repeater repeater, string controlName)
    {
        return repeater.Controls[repeater.Controls.Count - 1].Controls[0].FindControl(controlName);
    }
}

কেবলমাত্র একটি ছোট পিক নোট - আপনার পাদচরণের উদাহরণে আপনার নিয়ন্ত্রণ "[0] এ" গ "বড় করা দরকার।
মাইক কোলে

8
এই উত্তরটি আমার চোখে ব্যথা করে।
লয়েড পাওয়েল

10
এটি দুর্দান্ত কাজ করে। কেবল একটি নোট - আপনার পুনরাবৃত্তির ডেটাবাউন্ড করার পরে এটি কেবল কাজ করে।
হারুন

2
এটি করার জন্য এটি এমন কুৎসিত উপায় ... তবে এটি আমার পক্ষে কাজ করে। আপনাকে অনেক ধন্যবাদ! সম্ভব হলে আমি আপনাকে আরও +1 দেই।
ক্রুরিল

ভাল, এটি একটি চলমান কোড ..
মোহাম্মদ জাহাঙ্গীর আনসারী

53

আরও ভাল সমাধান

আপনি আইটেমক্রিটেড ইভেন্টে আইটেমের ধরণটি চেক করতে পারেন:

protected void rptSummary_ItemCreated(Object sender, RepeaterItemEventArgs e) {
    if (e.Item.ItemType == ListItemType.Footer) {
        e.Item.FindControl(ctrl);
    }
    if (e.Item.ItemType == ListItemType.Header) {
        e.Item.FindControl(ctrl);
    }
}

4
আপনি আইটেমডেটাবাউন্ডকে বিশেষভাবে বলেছেন, এটি আইটেমক্রিটেড, আপভোট।
রবার্তো অ্যালারকন

3
সম্মত, আরও ভাল সমাধান। নিয়ন্ত্রণের জন্য কেবল একটি রেফারেন্স সংরক্ষণ করুন।
স্প্রিন্টস্টার

1
এটি এটি করার একটি আরও ভাল উপায়।
টমাস ববলার

5

আপনি আইটেমক্রিয়েটেড ইভেন্টের নিয়ন্ত্রণের বিষয়ে একটি রেফারেন্স নিতে পারেন এবং পরে এটি ব্যবহার করতে পারেন।


13
আপনি কীভাবে পরে এটিকে অ্যাক্সেস করবেন তা আপনি কেবল জিজ্ঞাসা করেছিলেন, পরবর্তী সময়ে ব্যবহারের জন্য প্যাসকেল যে উত্তরটি রেফারেন্স সেট করেছিল তা পুরোপুরি বৈধ।
কাসাকু

4

রিপিটারের মধ্যে নিয়ন্ত্রণ সন্ধান করুন (শিরোনাম, আইটেম, পাদচরণ)

public static class FindControlInRepeater
{
    public static Control FindControl(this Repeater repeater, string controlName)
    {
        for (int i = 0; i < repeater.Controls.Count; i++)
            if (repeater.Controls[i].Controls[0].FindControl(controlName) != null)
                return repeater.Controls[i].Controls[0].FindControl(controlName);
        return null;
    }
}

2

এটি ভিবি.এনইটি-তে রয়েছে, আপনার প্রয়োজন হলে কেবল সি # তে অনুবাদ করুন:

<Extension()>
Public Function FindControlInRepeaterHeader(Of T As Control)(obj As Repeater, ControlName As String) As T
    Dim ctrl As T = TryCast((From item As RepeaterItem In obj.Controls
                   Where item.ItemType = ListItemType.Header).SingleOrDefault.FindControl(ControlName),T)
    Return ctrl
End Function

এবং এটি সহজ ব্যবহার করুন:

Dim txt as string = rptrComentarios.FindControlInRepeaterHeader(Of Label)("lblVerTodosComentarios").Text

এটি পাদলেখ দিয়ে কাজ করার চেষ্টা করুন এবং আইটেমগুলিও খুব নিয়ন্ত্রণ করে =)


2

এটি করার সর্বোত্তম এবং পরিষ্কার উপায় আইটেম_ তৈরি ইভেন্টের মধ্যে রয়েছে:

 protected void rptSummary_ItemCreated(Object sender, RepeaterItemEventArgs e)
        {
            switch (e.Item.ItemType)
            {
                case ListItemType.AlternatingItem:
                    break;
                case ListItemType.EditItem:
                    break;
                case ListItemType.Footer:
                    e.Item.FindControl(ctrl);
                    break;
                case ListItemType.Header:
                    break;
                case ListItemType.Item:
                    break;
                case ListItemType.Pager:
                    break;
                case ListItemType.SelectedItem:
                    break;
                case ListItemType.Separator:
                    break;
                default:
                    break;
            }
    }

0
private T GetHeaderControl<T>(Repeater rp, string id) where T : Control
{
    T returnValue = null;
    if (rp != null && !String.IsNullOrWhiteSpace(id))
    {
        returnValue = rp.Controls.Cast<RepeaterItem>().Where(i => i.ItemType == ListItemType.Header).Select(h => h.FindControl(id) as T).Where(c => c != null).FirstOrDefault();
    }
    return returnValue;
}

নিয়ন্ত্রণ এবং কাস্ট করে ts (পাইয়ের ভিবি উত্তরের উপর ভিত্তি করে)


0

আইটেমডেটাবাউন্ডের জন্য

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Header)//header
    {
            Control ctrl = e.Item.FindControl("ctrlID");
    }
    else if (e.Item.ItemType == ListItemType.Footer)//footer
    {
            Control ctrl = e.Item.FindControl("ctrlID");
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.