Gridview сүзгісін беретін қайталағышқа тіркеу үшін ашылатын тізім

Бұл хабарлама алдын-ала ашылған сүзгілеу нәтижелерін gridview-да жариялауға ұқсас. Енді, маған бұл түсірілімнің нәтижелерін грейдюрге сүзгіден өткізетін репитерге қосу үшін қажет. Мен ашылмалы тізімнің артқы жағындағы кодада rptLetters.DataBind() тырыстық, бірақ бұл әртүрлі элементтерді басқанда, парақтың жоғарғы жағындағы әріптердің ешқайсысын өзгертпейді ашылмалы тізім.

enter image description here

Скриншот өнімнің жеткілікті деңгейін көрсетпейді, бірақ бұл жағдайда G-дан L-ге ауысады, ал қайталағышта G-L арасындағы әріптер әлі де көрсетіледі. Маған бұл репитерді таңдаған компаниямен байланысты өнімдердің әрқайсысын бастайтын хаттарды тану мүмкіндігі болуы керек.



| |

Choose Company: 3rd Party BestDirect Securities Generic PFG Precious Metals PFGBest SFO Traders Press W&A Publishing
Protected Sub btnAll_Click(sender As Object, e As EventArgs) gvProducts.DataBind() End Sub Protected Sub btnLetter_Click(ByVal sender As Object, ByVal e As EventArgs) Dim btnLetter As LinkButton = TryCast(sender, LinkButton) If btnLetter Is Nothing Then Return End If dsProductLookup.SelectCommand = [String].Format("SELECT ProductID, ProductName FROM [Product] WHERE ([ProductName] LIKE '{0}%') ORDER BY [ProductName]", btnLetter.Text) dsProductLookup.SelectParameters.Clear() Dim controlParam As ControlParameter = New ControlParameter controlParam.ControlID = "rptLetters" controlParam.DefaultValue = "-1" controlParam.Name = "CompanyID" controlParam.PropertyName = "Container.ItemIndex" controlParam.Type = TypeCode.String dsProductLookup.SelectParameters.Add(controlParam) End Sub Protected Sub ddlCompany_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlCompany.SelectedIndexChanged rptLetters.DataBind() 'SELECT statement to update letter repeater dsLetters.SelectCommand = "SELECT DISTINCT LEFT(ProductName, 1) AS [Letter] FROM Product, CompanyLink, Company WHERE Product.ProductID = CompanyLink.ProductID AND CompanyLink.CompanyID = Company.CompanyID AND Company.CompanyID = @CompanyID" dsLetters.SelectParameters.Clear() 'declaring scalar variable @CompanyID Dim cp As ControlParameter = New ControlParameter cp.ControlID = "rptLetters" cp.DefaultValue = "-1" cp.Name = "CompanyID" cp.PropertyName = "SelectedValue" cp.Type = TypeCode.Int32 dsLetters.SelectParameters.Add(cp) 'SELECT statement to update Gridview based on dropdown list dsProductLookup.SelectCommand = "SELECT Company.CompanyName, Company.CompanyID, Product.ProductName, Product.ProductID FROM Company INNER JOIN CompanyLink ON Company.CompanyID = CompanyLink.CompanyID INNER JOIN Product ON CompanyLink.ProductID = Product.ProductID WHERE Company.CompanyID = @CompanyID ORDER BY Product.ProductName" dsProductLookup.SelectParameters.Clear() 'declaring scalar variable @CompanyName Dim controlParam As ControlParameter = New ControlParameter controlParam.ControlID = "ddlCompany" controlParam.DefaultValue = "-1" controlParam.Name = "CompanyID" controlParam.PropertyName = "SelectedValue" controlParam.Type = TypeCode.Int32 dsProductLookup.SelectParameters.Add(controlParam) End Sub

UPDATE: Working code posted below. The repeater doesn't work like a regular control so I added a hidden dropdown list to do the dirty work for the repeater. Thanks for the help!



 Protected Sub ddlLetters_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    rptLetters.DataBind()

    'SELECT statement to update letter repeater
    dsLetters.SelectCommand = "SELECT DISTINCT LEFT(ProductName, 1) AS [Letter] 
                              FROM Product, CompanyLink, Company 
                              WHERE Product.ProductID = CompanyLink.ProductID 
                              AND CompanyLink.CompanyID = Company.CompanyID 
                              AND Company.CompanyID = @CompanyID"

    'declaring scalar variable @CompanyID
    dsLetters.SelectParameters.Clear()
    Dim cp As ControlParameter = New ControlParameter
    cp.ControlID = "rptLetters"
    cp.DefaultValue = "-1"
    cp.Name = "CompanyID"
    cp.PropertyName = "ClientIDMode"
    cp.Type = TypeCode.Decimal
    dsLetters.SelectParameters.Add(cp)
End Sub
1
Сіздің қателігіңіз қандай?
қосылды автор Tim B James, көзі
DataBinding: «System.Web.UI.WebControls.Repeater» деген атауымда «Container» деген атпен сипат жоқ. Мен кодпен араласып, бұл басқару элементтерін бірге жұмыс істеу үшін қалай алуға болады, бірақ мен жауапқа шығады деп үміттенемін. Түпнұсқалық пост редакцияланған, қазір менде бар.
қосылды автор jlg, көзі
Мен енді бар кодымен жақындасам да, DataBinding: 'System.Web.UI.WebControls.Repeater' дегенде 'SelectedValue' деген атпен сипат жоқ деген қате бар. Мен қайталамадағы хатқа басқанда.
қосылды автор jlg, көзі

1 жауаптар

Мәселе мынада, сіз таңдайсыз dsLetters SelectCommand жаңарту кезінде пайдаланушы жаңа компания. Қазір таңдалған компанияны есепке алмай, барлық өнімдерді таңдайды. DdlCompany_SelectedIndexChanged ішіндегі таңдау пәрменін өзгерте аласыз.

1
қосылды
Менің ойымша, мәселе қайталанушыларда таңдалған құндылықтың тұжырымдамасы жоқ; бәрі сіз таңдаған нәрсені көрсетеді. Жасай алуы керек нәрсе жасырын ашылмалы тізімдегі қайталанатын мәндерді ұқсайды және ашылмалы тізімдегі сәйкес мәнді таңдау үшін клиенттік кодты қосыңыз, содан кейін ControlParameter-ді осы сипатқа байланыстырыңыз.
қосылды автор competent_tech, көзі
Мен ddl_CompanySelectedIndexChanged-ті жаңартуға тырыстым, тек белгілі бір компаниямен өнімдердің әріптерін көрсету үшін қайталайтын әріптерді алу үшін. Cp.PropertyName жолына қою керек деп ойлаймын. Бастапқы хабар жаңа кодпен өңделді.
қосылды автор jlg, көзі
Тамаша! Рақмет сізге! Мен күні бойы қайталағыштың қасиеттерін іздеп жүрмін және бәрін тырысамын. Мен бұл туралы ойлағаныма қуаныштымын. Бастапқы хабардағы жаңартылған код. :)
қосылды автор jlg, көзі