Avatar
Wayne
Člen
Avatar
Wayne:

Ahoj měl bych pár otázek, pomocí komponenty objectDataSource jsem vytáhl všechny informace co jsem potřeboval a pomocí GridView jsem je nechal zobrazit, vše se bez problému vypsalo, ale vypsalo se mi i id, ale to nyní nechci, když jsem si změnil proceduru vypsání všech informací, aby to nevypisovalo id, tak mi stejně sloupec id nezmizel akorát obsahuje 0. Dalším problémem je vkládání dat, který provádím pomocí DetailsView, kde pro vložení musím zadat id, ale to také nechci protože id se mi v db automaticky inkrementuje. Poradil by mi někdo?

 
Odpovědět  +1 30.11.2014 21:04
Avatar
vodslon
Člen
Avatar
Odpovídá na Wayne
vodslon:

Ahoj, ty sloupce by mělo jednoduše řešit select query, můžeš sem prosím dát kod?

 
Nahoru Odpovědět 1.12.2014 8:00
Avatar
Odpovídá na Wayne
Michal Štěpánek:

Napiš v čem to děláš a kus kódu, který to obsluhuje, takhle je to moc obecné...

Nahoru Odpovědět 1.12.2014 12:11
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Wayne
Člen
Avatar
Odpovídá na vodslon
Wayne:

Tady je datová třída

public class Kniha

    {
        private int id;
        public int BookID { get { return id; } }
        public string Nazev { get; set; }
        public string Autor { get; set; }


        public Kniha(int id, string nazev, string autor) {
            this.id = id;
            Nazev = nazev;
            Autor = autor;

        }
        public Kniha(string nazev, string autor) {
            Nazev = nazev;
            Autor = autor;
        }

        public Kniha(){}
    }

Databázová utilita
metoda pro vkládání

public int insertBook(Kniha kniha) {
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("insertBook",con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@BookID",SqlDbType.Int));
            cmd.Parameters["@BookID"].Direction=ParameterDirection.Output;
            cmd.Parameters["@BookID"].Value = kniha.BookID;
            cmd.Parameters.Add(new SqlParameter("@Nazev", SqlDbType.NVarChar));
            cmd.Parameters["@Nazev"].Value=kniha.Nazev;
            cmd.Parameters.Add(new SqlParameter("@Autor", SqlDbType.NVarChar));
            cmd.Parameters["@Autor"].Value = kniha.Autor;

            con.Open();
         int id = cmd.ExecuteNonQuery();
         con.Close();
            return id;
        }

metoda pro výpis

public List<Kniha> getAllBooks()
        {
            List<Kniha> knihy = new List<Kniha>();
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("getAllBooks", con);
            cmd.CommandType = CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Kniha kniha = new Kniha((string)reader["Nazev"], (string)reader["Autor"]);
                    knihy.Add(kniha);
                }
                return knihy;
            }
            catch (SqlException err)
            {
                throw new ApplicationException("Data error");
            }
            finally {
                con.Close();
            }
        }

A tady je ASP.NET

<body>
    <form id="form1" runat="server">
    <div>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="deleteBook" OnUpdating="ObjectDataSource1_Updating" UpdateMethod="Update Kniha SET Nazev=@Nazev, Autor=@Autor WHERE id=@id"  InsertMethod="insertBook" SelectMethod="getAllBooks" TypeName="DataComponent.KnihaDB" ConflictDetection="CompareAllValues">
            <InsertParameters>
                <asp:Parameter Direction="ReturnValue" Name="BookID" Type="Int32" />
            </InsertParameters>
            <UpdateParameters >
                <asp:Parameter Name="id" Type="Int32" />
            </UpdateParameters>
            <DeleteParameters>
                <asp:Parameter Name="BookID" Type="Int32" />
            </DeleteParameters>
        </asp:ObjectDataSource>
        <asp:DetailsView ID="DetailsView1" DefaultMode="Insert"  AutoGenerateInsertButton="true" DataSourceID="ObjectDataSource1" runat="server" Height="50px" Width="125px" CellPadding="4" ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle>

            <CommandRowStyle BackColor="#E2DED6" Font-Bold="True"></CommandRowStyle>

            <EditRowStyle BackColor="#999999"></EditRowStyle>

            <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True"></FieldHeaderStyle>

            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle>

            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle>

            <PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle>

            <RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle>
        </asp:DetailsView>
        <asp:Label ID="lbInsert" runat="server" Text=""></asp:Label>
        <br />
        <br />
        <asp:GridView ID="GridView1" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" Width="700px" DataSourceID="ObjectDataSource1"  runat="server" CellPadding="4" ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775"></AlternatingRowStyle>

            <EditRowStyle BackColor="#999999"></EditRowStyle>

            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></FooterStyle>

            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White"></HeaderStyle>

            <PagerStyle HorizontalAlign="Center" BackColor="#284775" ForeColor="White"></PagerStyle>

            <RowStyle BackColor="#F7F6F3" ForeColor="#333333"></RowStyle>

            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333"></SelectedRowStyle>

            <SortedAscendingCellStyle BackColor="#E9E7E2"></SortedAscendingCellStyle>

            <SortedAscendingHeaderStyle BackColor="#506C8C"></SortedAscendingHeaderStyle>

            <SortedDescendingCellStyle BackColor="#FFFDF8"></SortedDescendingCellStyle>

            <SortedDescendingHeaderStyle BackColor="#6F8DAE"></SortedDescendingHeaderStyle>
        </asp:GridView>
         </div>
    </form>
</body>
 
Nahoru Odpovědět 1.12.2014 16:33
Avatar
Odpovídá na Wayne
Michal Štěpánek:

Nevím, proč to děláš tak složitě? Jestliže máš v DB BookID jako autoincrement, podle mě by v INSERTu vůbec neměl figurovat. Proč si to neuděláš jednoduššeji? Dáš do ASP.NET SqlDataSource, kde si vygeneruješ automaticky příkazy a FormView si pak "nabinduješ" na to SqlDataSource. Automaticky se ti vytvoří textboxy a parametry příkazů se s nimi "spojí". Vše se pak provádí "samo"...

Nahoru Odpovědět 1.12.2014 21:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Wayne
Člen
Avatar
Wayne:

Nyní už mám vše vyřešeno, nyní řeším problém s editací a mazáním. Když edituji nějaký záznam tak po aktualizaci se mi stejně zobrazí záznam beze změn. U mazání mi událost na tlačítko taky nijak nereaguje. Neví někdo kde by mohl být problém?

 
Nahoru Odpovědět 2.12.2014 17:26
Avatar
Odpovídá na Wayne
Michal Štěpánek:

Viz můj příspěvek výše...
Těžko ti někdo poradí, když neuvedeš událost tlačítka...

Editováno 2.12.2014 18:19
Nahoru Odpovědět 2.12.2014 18:18
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Wayne
Člen
Avatar
Wayne:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="getAllBooks" TypeName="DataComponent.KnihaDB" UpdateMethod="updateBook" DeleteMethod="deleteBook">
            <DeleteParameters>
                <asp:Parameter Name="id" Type="Int32"></asp:Parameter>
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="id" Type="Int32"></asp:Parameter>
                <asp:Parameter Name="nazev" Type="String"></asp:Parameter>
                <asp:Parameter Name="autor" Type="String"></asp:Parameter>
            </UpdateParameters>
        </asp:ObjectDataSource>
        <asp:GridView ID="GridView1" DataSourceID="ObjectDataSource1" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <asp:CommandField ButtonType="Button" ShowDeleteButton="True" ShowEditButton="True" />
                 <asp:BoundField DataField="Nazev" HeaderText="Nazev" SortExpression="Nazev"></asp:BoundField>
                <asp:BoundField DataField="Autor" HeaderText="Autor" SortExpression="Autor" />
            </Columns>
            <EditRowStyle BackColor="#999999"/>
            <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
            <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
            <SortedAscendingCellStyle BackColor="#E9E7E2" />
            <SortedAscendingHeaderStyle BackColor="#506C8C" />
            <SortedDescendingCellStyle BackColor="#FFFDF8" />
            <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
        </asp:GridView>
public void updateBook(int id,string nazev,string autor) {
           SqlConnection con = new SqlConnection(connectionString);
           SqlCommand cmd = new SqlCommand("updateBook", con);
           cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add(new SqlParameter("Nazev", SqlDbType.NVarChar));
           cmd.Parameters["Nazev"].Value = nazev;
           cmd.Parameters.Add(new SqlParameter("Autor", SqlDbType.NVarChar));
           cmd.Parameters["Autor"].Value = autor;
           cmd.Parameters.Add(new SqlParameter("BookID", SqlDbType.Int));
           cmd.Parameters["BookID"].Value = id;

           try
           {
               con.Open();
               cmd.ExecuteNonQuery();
           }
           catch (SqlException ex)
           {
               throw new ApplicationException("Data error");
           }
           finally
           {
               con.Close();
           }
       }
public int deleteBook(int id) {
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("deleteBook",con);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@BookID", SqlDbType.Int));
            cmd.Parameters["@BookID"].Value = id;

                con.Open();
                    int radku = cmd.ExecuteNonQuery();
                return radku;

                con.Close();
            }
 
Nahoru Odpovědět 2.12.2014 19:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.