Vyřešil jsem to pomocí RegEx
Příspěvky odeslané z IP adresy 88.103.170.–
Zdravím, nevím si rady, jak zobrazit hypertextový odkaz uvnitř textu.
Html encode jsem vyřešil při vkáldání do databáze takto:
Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("MotWebConnectionString").ConnectionString.ToString)
Try
conn.Open()
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText = "INSERT INTO Posts (GroupId, UserName, Text) VALUES (@GroupId, @UserName, @Text)"
cmd.Parameters.Add("@GroupId", System.Data.SqlDbType.Int).Value = Request.QueryString("id")
cmd.Parameters.Add("UserName", System.Data.SqlDbType.NVarChar).Value = Context.User.Identity.Name
cmd.Parameters.Add("Text", System.Data.SqlDbType.NText).Value = HtmlRemoval.StripTagsCharArray(txtAddPost.Text)
cmd.ExecuteNonQuery()
Response.Redirect(ResolveClientUrl("~/Groups/Group.aspx?id=" + Request.QueryString("id")))
Catch ex As SqlException
Finally
conn.Close()
End Try
A zobrazuju přes SqlDataSource v Repeateru v Literalu:
<asp:Literal ID="TextLiteral" Text='<%# Eval("Text")%>' Mode="Encode" runat="server">
Už 2 dny googluju, jak před zobrazením dat si je přečíst, najít úseky textu začínající na http://... a končící mezerou a dát si je do <a rel="nofollow" href="">.... nebo nějaký jiný způsob, jak zvýraznit obyčejné odkazy (http://něco.com) uvnitř textu.
Neznal by někdo nějaké jednoduché řešení této záležitosti (přidejte prosím kdyžtak zdroják)?
#5 Evzen
Díky za odpověď. Vaše řešení je dobré a mám ho připravené jako záložní řešení, protože jsem tenhle způsob už v minulosti použil v jiném projektu.
Teď právě potřebuju, aby na jedné stránce byl seznam všech příspěvků a pod příspěvkem seznam komentářů k němu patřícím. Bohužel se mi to tímto způsobem nedaří.
Co je to SELECT a JOIN vím. Akorát jsem doposud nepotřeboval jiný příkaz, než pouze JOIN. Jaký je rozdíl mezi INNER JOIN a OUTER JOIN se podívám.
Díky za odpověď. Tohle pomohlo, už se zobrazují i příspěvky bez komentáře.
Ještě problém, na který jsem teď přišel. Když má příspěvek více komentářů, tak se ten příspěvek rozdvojí (zkopíruje), je na stránce vícekrát a pod každou kopií je jeden komentář. Nevíte, jak fixnout tohle?
A potom bych ještě potřeboval poradit s tím vkládáním komentářů.
#1 jstorm
Tak už jsem na něco přišel.
Udělal jsem si tabulku Comments se sloupcem ID příspěvku. Spojil jsem tabulku Posts a Comments příkazem JOIN a komentář se opravdu zobrazí jenom pod příspěvkem, pod kterým má.
Akorát mám 2 problémy. Na stránce se zobrazí pouze ty příspěvky, které mají nějaký komentář. Ty bez komentáře se nezobrazí.
Potom nevím, jak vložit do tabulky s komentáři ID příspěvku, ke kterému komentář napíšu.
Přidám kód:
<div id="GroupPosts">
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:MotWebConnectionString %>"
SelectCommand="SELECT * FROM [Posts]
JOIN [Users] ON [Users].[UserName] = [Posts].[UserName]
JOIN [Comments] ON [Comments].[PostId] = [Posts].[PostId]
WHERE ([GroupId] = @GroupId) ">
<SelectParameters>
<asp:QueryStringParameter Name="GroupId" QueryStringField="id" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Repeater ID="DataList2" runat="server" DataSourceID="SqlDataSource3" >
<ItemTemplate>
<table style="width: 100%;">
<tr>
<td width="10%">
<asp:Image ID="Image2" runat="server" Width="64px" Height="64px" ImageUrl='<%# Eval("ProfilePicture")%>' />
</td>
<td align="left" width="90%" >
<p><asp:Literal ID="Literal2" runat="server" Text='<%# Eval("Username")%>'></asp:Literal></p>
</td>
</tr>
</table>
<asp:Literal ID="Literal3" runat="server" Text='<%# Eval("Text")%>'></asp:Literal>
<table>
<tr>
<td>
<asp:Literal ID="Literal4" runat="server" Text='<%# Eval("CommentText")%>'></asp:Literal>
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater
Dobrý den, ve svém projektu potřebuji na stránku jednoduché příspěvky a komentáře k nim jako např. na Facebooku.
Příspěvky jsem udělal jednoduše přes tabulku v databázi, SqlDataSource a DataList. Horší to je s komentáři.
Do ItemTemplate DataListu jsem hodil další DataList, určený pro komentáře ke každému příspěvku. Kdyby byl na stránce pouze jeden přispěvek, dokázal bych udělat komentář. V tabulce s komentáři bych měl vazbu na ID příspěvku. Ale nedokážu to vymyslet, když je jich na stránce více, tak aby byl komentář přímo pod příspěvkem, ke kterému patří.
Můžete mi prosím poradit, jak vyřešit tento problém? Případně existuje již nějaké hotové řešení, které bych mohl použít a graficky si ho přizpůsobit?
#2 RomanZ
Už jsem na to přišel, děkuju za odpověď. SQL dotaz nechám stejně, tedy WHERE [UserName] LIKE @UserName
A na stránce s vyhledávacím políčekm, kde předávám hodnotu z textboxu do parametru v CodeBehind akorát dopíšu procenta takhle:
Response.Redirect(ResolveClientUrl("~/SearchResults.aspx?q=%" + TextBox1.Text + "%"))
Zdravím, potřeboval bych poradit, jak správně sestavit sql příkaz pro vyhledávání s filterm LIKE a QueryString parametrem.
SelectCommand="SELECT [UserName] FROM [Users] WHERE ([UserName] LIKE '%@UserName%')">
<SelectParameters>
<asp:QueryStringParameter Name="UserName" QueryStringField="q" Type="String" />
</SelectParameters>
Takhle to nenajde nic, ale když napíšu místo parametru přímo hledaný výraz, tak to funguje -where ([UserName] Like '%adam%'
Jak mám teda správně napsat tento sql dotaz s querystring parametrem?
#8 Kuba
Už jsem na to přišel. Kód má být takto:
Protected Sub SqlDataSource3_Inserted(sender As Object, e As SqlDataSourceStatusEventArgs)
If e.Exception IsNot Nothing Then
Response.Redirect(ResolveClientUrl("~/Default.aspx"))
' Prevent exception from being re-thrown
e.ExceptionHandled = True
End If
End Sub
#1 HoriciKer
Našel jsem si na internetu tento kód:
Try
Catch ex As SqlException
If Not ex.ErrorCode = &H80131904UI Then
Throw
End If
End Try
Ale bohužel nevím, do jaké události jej mám vložit. Zkoušel jsem to do události tlačítka, které vyvolá chybu (Button_click), do Page_Error, Application_Error. V ani jednom případě se chyba neošetří.
Dobrý den, potřebuju poradit, jak ošetřit tuto vynucenou chybu.
Chybu vyvolávám záměrně, aby se do databáze nevkládali duplicitní údaje. Do databáze se po kliknutí na tlačítko uloží údaj.
V programování nejsem moc dobrý, a nevím, do jaké události ošetřit tuto chybu. Asi by se měla ošetřit nějakou podmínkou - pokud nastane chyba SqlException, zobrazit hlášku. Bohužel nevím, jak mám tuto podmínku poskládat.
Taky jsem zkoušel použít Try...Catch blok, ale takhle to asi nepůjde, protože s databází nekomunikuji v kódu, ale na serveru přes SqlDataSource.
Předem děkuji za odpověď
Nakonec jsem přišel na řešení pomocí DataRelation:
'ds je dataset, který už mám v projektu
Dim tridy As DataTable = ds.Tables("Tridy")
Dim zaci As DataTable = _Marks_DataSet.Tables("Zaci")
_Marks_DataSet.Relations.Add("relation1",tridy.Columns("IdTrida"), zaci.Columns("IdTrida"))
dgvTridy.DataSource = _Marks_DataSet
dgvTridy.DataMember = "tridy"
dgvZaci.DataSource = _Marks_DataSet
dgvZaci.DataMember = "tridy.relation1"
Dobrý den, potřeboval bych poradit s jednou databázovou aplikací, na které pracuji.
A problém je následující. Mám 2 DataGridView, a potřeboval bych filtrovat data v tom druhém, podle toho prvního. Např. v prvním DGV mám seznam tříd, a po kliknutí na třídu bych chtěl v druhém DGV zobrazit žáky, kteří chodí pouze do třídy, kterou jsem vybral.
Napadlo mě, že v události prvního DGV "cell click" se provede LINQ dotaz (např.: SELECT * FROM [zaci] WHERE [idzak] IN [vazebnatabulka] =...). Ale nevím, jak získat po kliknutí na třídu v DGV id této třídy, a následně ho použít v dotazu.
Nevěděli byste někdo, jak tento problém vyřešit?
Děkuji za odpověď
#3 Keny
Ukládání textu z textového pole do souboru je jednoduché. Používá se pro to třídy StreamReader a StreamWriter.
Vytvoř si v projektu txt soubor, a nastav mu vlastnost "Copy To Output Directory" na "Copy Always"
Ukládání
Dim soubor As New IO.StreamWriter("soubor.txt") 'otevření souboru
'text z každého textboxu je zapsaný na samostatný řádek
soubor.WriteLine(TextBox1.Text)
soubor.WriteLine(TextBox2.Text)
soubor.WriteLine(TextBox3.Text)
soubor.Close() 'zavření souboru
Načítání
Dim soubor As New IO.StreamReader("soubor.txt") 'otevření souboru
While soubor.EndOfStream 'číst, dokud nejsme na konci souboru
'načtení řádků ze souboru
Dim text As String = soubor.ReadLine() 'načtení prvního textu
Dim text2 As String = soubor.ReadLine() 'druhého
Dim text3 As String = soubor.ReadLine() 'třetího
MsgBox(text & vbCrLf & text2 & vbCrLf & text3) 'zobrazení textů v msgboxu, tady už si to zobrazíš v čem potřebuješ
soubor.Close() 'zavřít souboru
#2 pistolnik
Děkuji za odpověď, tohle by mohlo fungovat, ale hází mi to chybu u tohohle kódu:
Text: Index was out of range.Must be non-negative and less than the size of the collection.
Jméno sloupce v datagridviewu se mi zdá být v pořádku. Jaké jiné jméno bych tam měl dát?
Dobrý den, potřeboval bych poradit, jak sečíst hodnoty celého sloupce v DataGridViewu.
Mám tam několik sloupců a potřeboval bych sečíst hodnoty všech řádků z celého jednoho sloupce. Jak mám toto provést?
Děkuji za odpověď
Ahoj, chci aby se v mém programu po zmáčknutí tlačítka otevřel soubor v TextBoxu. Ale chci aby se tam otevřel soubor, který vytvořím přímo v projektu (Add, New Item, TextFile). Ale tento soubor se mi neotevře, takže otázka zní: dá se otevřit soubor přímo z projektu? Nebo musím pokaždé uvést cestu (C:\...).
Mám tento kód, ale po zmáčknutí zůstáva TextBox prázdný.
Imports System.IO
...
Dim soubor As StreamReader
soubor = New StreamReader("soubor.txt")
TextBox2.Text = soubor.ReadToEnd
soubor.Close()
Poradíte mi někdo prosím?
Děkuji za odpověďZdravím, v mojí aplikaci můžu měnit barvu pozadí a tlačítek pomocí výběru schématu z ComboBoxu. Všechno je v pořádku, ale nevím jak uložit barvu, aby byla stejná i při opětovném spuštění aplikace.
Dim dlg As New Dialog3
If dlg.ShowDialog = DialogResult.OK Then
Dim VyberSchematu As Object = dlg.ComboBox1.SelectedItem 'vybrat item z combo boxu
Select Case VyberSchematu
Case "Modrá" 'změnit schéma na modré
Me.ForeColor = Color.Blue
Me.BackColor = Color.Blue
Case "Červená"
Me.ForeColor = Color.Red 'změnit schéma na červené
Me.BackColor = Color.Red
Case "Zelená"
Me.ForeColor = Color.Green 'změnit schéma na zelené
Me.BackColor = Color.Green
Case "Žlutá"
'změnit schéma na žluté
Me.BackColor = Color.Yellow
Case "Šedá"
Me.ForeColor = Color.Gray 'změnit schéma na šedé
Me.BackColor = Color.Gray
Poradíte mi někdo prosím?
Děkuji za odpověď
Pokouším se vylepšit prorgram z článku
http://www.vbnet.cz/…em_http.aspx
tak, abych si mohl vybrat měnu, kterou chci.
Po stisknutí tlačítka se zobrazí dialog, ve kterém si pomocí ComboBoxu vyberu jednu z měn.
Kód jsem upravil takto
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim dlg As New Dialog2
Dim VyberMeny As String = dlg.ComboBox1.ValueMember
Dim kurz As Single = 0
dlg.ShowDialog()
Try
'vystavit požadavek na dnešní den
Dim url As String = String.Format("http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date={0:dd.MM.yyyy}", Now)
Dim rq As HttpWebRequest = HttpWebRequest.Create(url)
'odeslat jej na server a získat odpověď
Dim rs As HttpWebResponse = rq.GetResponse()
'vytvořit StreamReader pro pohodlnou práci
Dim sr As New IO.StreamReader(rs.GetResponseStream())
'projít řádky
While Not sr.EndOfStream
Dim s As String = sr.ReadLine()
Select Case VyberMeny
Case dlg.ComboBox1.ValueMember("USD")
If s.StartsWith("USA|") Then
kurz = CDbl(s.Substring(s.LastIndexOf("|") + 1))
MsgBox(String.Format("Aktuální kurz: 1 USD = {0:c}", kurz))
End If
Case dlg.ComboBox1.ValueMember("EUR")
If s.StartsWith("EMU|") Then
kurz = CDbl(s.Substring(s.LastIndexOf("|") + 1))
MsgBox(String.Format("Aktuální kurz: 1 EUR = {0:c}", kurz))
End If
Case dlg.ComboBox1.ValueMember("GBP")
If s.StartsWith("Velká Británie|") Then
kurz = CDbl(s.Substring(s.LastIndexOf("|") + 1))
MsgBox(String.Format("Aktuální kurz: 1 GBP = {0:c}", kurz))
End If
End Select
End While
'zavřít StreamReader
sr.Close()
'zavřít spojení
rs.Close()
Catch ex As Exception
MsgBox("", , ex.Message)
End Try
End Sub
Ale po vybrání měny mi to hodí chybovou hlášku "Převod řetězce USD na typ Integer není platný". Přemýšlel jsem nad tím nevím si rady, jak to udělat aby mi to šlo.
Neví prosím někdo co mám upravit? (jsem začátečník, tak mi to kdyžtak vysvětlete nějak polopaticky)
Děkuji za odpověď