DropDown   zodpovězená otázka

ASP.NET WebForms

Ahoj, jak u DropDown udělat aby se id zobrazeného názvu kategorie zapsalo do druhé tabulky???

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Nechcete to trochu upřesnit?

Jak vypadá SQL dotaz, kam chcete ID dosadit. Děláte to přes SqlDataSource, v kódu nebo jak?

Proboha živého...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jo omlouvám se,

Takže jde to přes SqlDataSource

SQL Dotaz

Create Table [dbo].[InsuranceCategories]
(
	[IdCatInsurance] int identity(1,1) not null,
	[TypeInsurance] nvarchar(100) not null,
	
	CONSTRAINT PK_InsuranceCategories PRIMARY KEY CLUSTERED ([IdCatInsurance] ASC)
)

Create table [dbo].[Insurance]
(
	[IdInsurance] int identity(1,1) not null,
	[Title] varchar(max) not null,
	[Description] nvarchar(max) null,
	[Images] varchar(max) null,
	[Price] varchar(max) null,
	[CatID] int not null
	
	CONSTRAINT PK_Insurance PRIMARY KEY CLUSTERED (IdInsurance ASC)
	CONSTRAINT FK_relace FOREIGN KEY (CatID) REFERENCES InsuranceCategories(IdCatInsurance)
)

CREATE VIEW [InsuranceInsuranceCategories] as
	select
			IdInsurance, Title, Description, Price, Images, 
			TypeInsurance, IdCatInsurance
		from InsuranceCategories
			left join Insurance on InsuranceCategories.IdCatInsurance = insurance.catid


select * from InsuranceInsuranceCategories

a potřebuju aby se IdCatInsurance dosadilo do CatID ale tak aby to CatID odpovídalo vyselectovanýmu záznamu v DropDownListu

<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1"
    DataTextField="TypeInsurance" 
    DataValueField="IdCatInsurance">
</asp:DropDownList>

zkoušel jsem to následovně

VB.NET ale soudím že je asik na 99% blbě z toho důvodu že je to podtržený vlnkou

    Protected Sub CatIDTextBox_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        DropDownList.SelectedValue.Insert(startIndex:="{0}", value:="{0}")
    End Sub


TextBox

<asp:TextBox ID="CatIDTextBox" runat="server" 
    Text='<%# Bind("CatID") %>'
    OnLoad="CatIDTextBoxE_Load" />

stačí to takto

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jinak celá stránka vypadá následovně

<%@ Page Title="Úvod (Zobraz)" Language="VB" MasterPageFile="~/Admin/SiteAdmin.master" %>

<script runat="server">

    Protected Sub CatIDTextBox_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        DropDownList.SelectedValue.Insert(startIndex:="{0}", value:="{0}")
    End Sub
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:FRAVLSERVIS %>" 
        SelectCommand="SELECT * FROM [Insurance] WHERE ([CatID] = @CatID)"
        DeleteCommand="DELETE FROM [Insurance] WHERE [IdInsurance] = @IdInsurance"
        InsertCommand="INSERT INTO [Insurance] ([Title], [Description], [Images], [Price], [CatID]) VALUES (@Title, @Description, @Images, @Price, @CatID)" 
        
        UpdateCommand="UPDATE [Insurance] SET [Title] = @Title, [Description] = @Description, [Images] = @Images, [Price] = @Price, [CatID] = @CatID WHERE [IdInsurance] = @IdInsurance">
        <SelectParameters>
            <asp:QueryStringParameter Name="CatID" QueryStringField="Id" 
                Type="Int32" />
        </SelectParameters>
        <DeleteParameters>
            <asp:Parameter Name="IdInsurance" Type="Int32" />
        </DeleteParameters>
        <UpdateParameters>
            <asp:Parameter Name="Title" Type="String" />
            <asp:Parameter Name="Description" Type="String" />
            <asp:Parameter Name="Images" Type="String" />
            <asp:Parameter Name="Price" Type="String" />
            <asp:Parameter Name="CatID" Type="Int32" />
            <asp:Parameter Name="IdInsurance" Type="Int32" />
        </UpdateParameters>
        <InsertParameters>
            <asp:Parameter Name="Title" Type="String" />
            <asp:Parameter Name="Description" Type="String" />
            <asp:Parameter Name="Images" Type="String" />
            <asp:Parameter Name="Price" Type="String" />
            <asp:Parameter Name="CatID" Type="Int32" />
        </InsertParameters>
    </asp:SqlDataSource>
    <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1" 
        DataKeyNames="IdInsurance" DefaultMode="Edit">
        <EditItemTemplate>
            
            <table>
                <tr>
                    <td>
                        Nadpis:
                    </td>
                    <td colspan="2">
                        <asp:TextBox ID="TitleTextBox" runat="server"
                            Text='<%# Bind("Title") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Popis
                    </td>
                    <td colspan="2">
                        <asp:TextBox ID="DescriptionTextBox" runat="server" 
                            Text='<%# Bind("Description") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Cena
                    </td>
                    <td colspan="2">
                        <asp:TextBox ID="PriceTextBox" runat="server"
                            Text='<%# Bind("Price") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Obrázek
                    </td>
                    <td colspan="2">
                        <asp:TextBox ID="ImagesTextBox" runat="server"
                            Text='<%# Bind("Images") %>' />
                    </td>
                </tr>
                <tr>
                    <td>
                        Název kategorie
                    </td>
                    <td>
                        <asp:DropDownList ID="DropDownList" runat="server" 
                            DataSourceID="SqlDataSource1"
                            DataTextField="TypeInsurance" 
                            DataValueField="IdCatInsurance">
                        </asp:DropDownList>
                    </td>
                    <td>
                        <asp:TextBox ID="CatIDTextBox" runat="server"
                            Text='<%# Bind("CatID") %>'
                            OnLoad="CatIDTextBoxE_Load" />
                    </td>
                </tr>
                <tr>
                    <td colspan="3">
                        <asp:Button ID="UpdateButton" runat="server" CausesValidation="True" 
                            CommandName="Update" Text="Upravit" />
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <asp:Button ID="UpdateCancelButton" runat="server" 
                            CausesValidation="False" CommandName="Cancel" Text="Zrušit" />
                    </td>
                </tr>
            </table>
        </EditItemTemplate>
    </asp:FormView>
</asp:Content>

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1. Ten DropDownList potřebuje určitě jiný SqlDataSource, musíte mít ve stránce dva - jeden pro FormView, druhý pro ten DropDownList, protože ten potřebuje jinou tabulku. Dejte druhý datasource hned nad ten DropDownList a napojte ho, stačí mu SelectCommand tak, aby vybral názvy a IDčka kategorií.

2. Tomu DropDownListu přidejte tuto vlastnost (nebojte se, že ji IntelliSense nezná, je záměrně skrytá, aby se ji lidi nesnažili nastavovat nesprávným způsobem):

 SelectedValue='<%# Bind("CatID") %>'

Vlastnost DataTextField říká název sloupce, který se zobrazí, a vlastnost DataValueField říká sloupec, jehož hodnota se při vybrání záznamu nastaví právě do SelectedValue.

Pokud máte v databázi na sloupci s IDčkem cizí klíč (a tím pádem v tom sloupci nejde nastavit hodnoty, které nejsou v tabulce kategorií), mělo by to fungovat.

3. Pokud chcete umožnit, aby kategorie nebyla vybrána (v tom sloupci může být NULL), přidejte dovnitř DropDownListu tohle:

<asp:ListItem Text="(nevybráno)" Value="" />

A DropDownListu přidejte tohle, aby natažení položek z datasource nepřepsalo ty, které tam už jsou:

AppendDataBoundItems="true"
nahlásit spamnahlásit spam 1 / 3 odpovědětodpovědět

Díky

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback