Omlouvám se, ale měl jsem dotaz již ze začátku směřovat jinak... Asi zkusím spíše popsat o co se pokouším v globálu. Snažím se vytvořit přehledový formulář s daty z tabulky v databázi s tím, že na každém řádku (Items) bude možnost tzv. řádkového ukládání. Abych lépe specifikoval co to je, popíšu postupy, které jsem již zkoušel: Vytvořil jsem DataList, A v ItemDataBound tohoto datalistu jsem definoval, co se má do datalistu načítat. (asi takto...)
Private Sub DataList1_ItemDataBound(sender As Object, e As DataListItemEventArgs)
Dim cnn_4 As New SqlConnection (System.Configuration.ConfigurationSettings.AppSettings("alfweb_Connection"))
Dim cmd_4 As New SqlCommand ("SELECT * From [SKL_SP_DokladyR] Where [DokladId] = @DokladId and CisloRadku = @CisloRadku", cnn_4)
cmd_4.Parameters.Add ("@DokladId", SqlDbType.Varchar, 50).Value = CType(e.Item.FindControl("hf_DokladId"), HiddenField).Value
cmd_4.Parameters.Add ("@CisloRadku", SqlDbType.Varchar, 50).Value = CType(e.Item.FindControl("hf_CisloRadku"), HiddenField).Value
cnn_4.open()
Dim dtr_4 As SqlDataReader = cmd_4.ExecuteReader()
If dtr_4.Read() Then
CType(e.Item.FindControl("CisloRadku"), TextBox).Text = dtr_4("CisloRadku").ToString()
CType(e.Item.FindControl("StavRadku"), TextBox).Text = dtr_4("StavRadku").ToString()
CType(e.Item.FindControl("Sklad"), TextBox).Text = dtr_4("Sklad").ToString()
CType(e.Item.FindControl("Stroj"), TextBox).Text = dtr_4("Stroj").ToString()
CType(e.Item.FindControl("Polozka"), TextBox).Text = dtr_4("Polozka").ToString()
CType(e.Item.FindControl("Popis1"), TextBox).Text = dtr_4("Popis1").ToString()
CType(e.Item.FindControl("Varianta1"), DropDownList).SelectedValue = dtr_4("Varianta1").ToString()
CType(e.Item.FindControl("MnozstviMj"), TextBox).Text = dtr_4("MnozstviMj").ToString()
CType(e.Item.FindControl("MnozstviZj"), TextBox).Text = dtr_4("MnozstviZj").ToString()
CType(e.Item.FindControl("MeJednotka"), TextBox).Text = dtr_4("MeJednotka").ToString()
CType(e.Item.FindControl("ZaJednotka"), TextBox).Text = dtr_4("ZaJednotka").ToString()
End If
dtr_4.close()
cnn_4.close()
End Sub
Řekněme, že nyní se mi do datalistu načetlo X záznamů, a já bych potřeboval data měnit přímo přepsáním hodnot v načtených datech. Například v items(3) upravím hodnotu v TextBoxu s id "polozka" opusím TextBox, a provede se akce v databázi. Aby to ovšem bylo ještě zajímavější, tak je třeba, aby jednotlivé prvky v items(3) na sebe měli návaznost. Tzn že pokud například upravím hodnotu v již zmiňovaném TextBoxu "Polozka", odešle se dotaz do databáze, který vyhledá k této položce Popis a ten mi vrátí do TextBoxu v Items(3) s id "Popis1" a v případě že v databázi nenajde, vrátí do obou polí prázdnou hodnotu. Pro tento učel jsem si vytvořil:
Protected Sub vyhledej_polozku_a_vloz_do_radku(ByVal sender As Object, ByVal e As System.EventArgs)
Dim cnn_p7 As New SqlConnection (System.Configuration.ConfigurationSettings.AppSettings("alfweb_Connection"))
Dim txt_p7 As String = "Select Id, Prepocet, MeJednotka, (Select Popis1 From Skl_Cs_PolozkyH Where Id = Skl_Cs_PolozkyR.Id) as Popis, (Select ZaJednotka From Skl_Cs_PolozkyH Where Id = Skl_Cs_PolozkyR.Id) as ZaJednotka From Skl_Cs_PolozkyR Where EanKod = @Promena_Polozka And (Select TypPolozky From Skl_Cs_PolozkyH Where Id = Skl_Cs_PolozkyR.Id) = 'OB'"
Dim cmd_p7 As New SqlCommand (txt_p7, cnn_p7)
cmd_p7.Parameters.Add ("@Promena_polozka", SqlDbType.Varchar, 50).Value = Polozka.text
cnn_p7.open()
Dim dtr_p7 As SqlDataReader = cmd_p7.ExecuteReader()
If dtr_p7.Read() Then
Polozka.text = dtr_p7("Id").ToString()
Popis1.text = dtr_p7("Popis").ToString()
MeJednotka.Text = dtr_p7("MeJednotka").ToString()
ZaJednotka.Text = dtr_p7("ZaJednotka").ToString()
MnozstviMj.Text = "1,00"
MnozstviZj.Text = dtr_p7("Prepocet").ToString()
Varianta1.Focus()
Else
Polozka.text = ""
Popis1.text = ""
MeJednotka.Text = ""
ZaJednotka.Text = ""
MnozstviMj.Text = ""
MnozstviZj.Text = ""
Stroj.Text = ""
MeJednotka.Enabled = "True"
Polozka.Focus()
End If
dtr_p7.close()
cnn_p7.close()
End Sub
Jenže neumím v něm specifikovat v jakém Items() v DataListu jsem TextBox "Položka" editoval, a do jakého Items() v DataListu se má výsledek odeslat. Proto jsem si naivně myslel, že si prvky nechám vygenerovat dynamicky přímo do <Form>, bez použití DataListu s tím, že id prvku budu naplňovat přímo primárním klíčem záznamu v tabulce, a pak budu umět specifikovat jaký TextBox Edituji a do jakého TextBoxu se má vrátit hodnota. Toto mi ovšem také nevyšlo. Já bych asi potřeboval jen radu od někoho, kdo již něco podobného řešil, a ukázal mi jen směr, kterým by to šlo vyřešit. Napadlo mě například načítat si ClientId editovaného items() do QueryStringu ale to mi nepřipadá moc elegantní řešení. Nebo nějak využít PostBack ale přiznám se, že nevím jak. Omlouvám se, že jsem z toho udělal román, nebo že to vysvětluji moc složitě a zdlouhavě. Pokud by měl někdo chuť na to odpovědět, tak budu vděčný za každé nakopnutí.
|