Avatar billede uc Nybegynder
15. juli 2005 - 14:34 Der er 4 kommentarer og
1 løsning

DataGrid_Update virker ikke.!

Hej eksperter
Nu er jeg sq gået lidt kold på det her DataGrid.
DG virker fint.
Men når jeg trykker på Edit
og indtaster en ny værdi i TextBoxen bliver den ikke læst
og gemt i min DB.
Der er mange ligende ? her på Eksperten.dk og jeg har da
også værtet igennem de fleste uden held.
og nu er det sikker en lille åndsvag ting jeg mangler..!!

void DataGrid1_Update(object sender, DataGridCommandEventArgs e) {
 
TextBox NewValue= (TextBox)e.Item.FindControl("kunde");
string newkunde = NewValue.Text;
dbConn = new OleDbConnection(Application["MyStrConn"].ToString());
sql = String.Format("UPDATE install SET kunde='{0}' Where ID = {1};",  newkunde, 2);

                        //Så jeg kan se hvad sql streng bliver til.!!
                        Label2.Text = sql;

                        IDbCommand  dbCmd1;
                        dbCmd1 = new OleDbCommand();
                        dbCmd1.CommandText = sql;
                        dbCmd1.Connection = dbConn;
                        IDataReader dbReader2;
                        dbConn.Open();
                        dbReader2 = dbCmd1.ExecuteReader();
                        dbConn.Close();

                        DataGrid1.EditItemIndex = -1;
                        BindData();//til DataGrid1

                            }
       
<asp:DataGrid id="DataGrid1" runat="server" Width="90%" GridLines="Vertical" AutoGenerateColumns="False"
OnUpdateCommand="DataGrid1_Update"
OnCancelCommand="DataGrid1_Cancel"
OnEditCommand="DataGrid1_Edit">
<HeaderStyle backcolor="Silver"></HeaderStyle>
<Columns>
    <asp:TemplateColumn HeaderText="ID">
      <ItemTemplate>
<asp:Label runat="server" id="id" Text= '<%# DataBinder.Eval(Container.DataItem, "id") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="Kunde">
        <ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.kunde") %>'></asp:Label>
          </ItemTemplate>
          <EditItemTemplate>
<asp:TextBox runat="server" ID="kunde" Text='<%# DataBinder.Eval(Container, "DataItem.kunde") %>'>
</asp:TextBox>
          </EditItemTemplate>
          </asp:TemplateColumn>
  <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="OK" CancelText="Cancel" EditText="Edit">
</asp:EditCommandColumn>
                </Columns>
            </asp:DataGrid>
Avatar billede snepnet Nybegynder
15. juli 2005 - 21:29 #1
hej :o)

det er nok mere noget i denne stil du skal have fat i:

OleDbComman command = new OleDbCommand(sql, dbConn);
dbConn.Open();
command.ExecuteNonQuery();
dbConn.Close();

og så skal du nok lige huske at sikre denne:
sql = String.Format("UPDATE install SET kunde='{0}' Where ID = {1};",  newkunde, 2);
så det ikke kun er den med ID=2 du gør noget ved.

mvh
Avatar billede uc Nybegynder
15. juli 2005 - 21:58 #2
Hej snepnet

Jeg er sikker på at Update sql virker.(ser måske lidt rodet ud, copy / paste ting)
ID=2 er fast under test, så jeg ved hvad jeg piller ved.
Min Label2 som skriver sql stengen er = UPDATE install SET kunde='' Where ID = 2
så TextBox NewValue= (TextBox)e.Item.FindControl("kunde");
viser ikke den nye indtasted værdi.???
Den burde returnere DataGrid's Eller ???
<EditItemTemplate>
<asp:TextBox runat="server" ID="kunde" Text='<%# DataBinder.Eval(Container, "DataItem.kunde") %>'>
</asp:TextBox>
          </EditItemTemplate>


Rune
Avatar billede snepnet Nybegynder
15. juli 2005 - 22:11 #3
hej igen rune :o)

det var nu ikke så meget fordi der er noget i vejen med din sql... det var mere den måde du fyrer den af på - derfor forslaget om .ExecuteNonQuery istedet. du har ikke rigtig noget at bruge en reader til i det scenarie du har vist - ej heller synes der er være nogen grund til at du arbejder med interfaces..... såhhh :

OleDbComman command = new OleDbCommand(sql, dbConn);
dbConn.Open();
command.ExecuteNonQuery();
dbConn.Close();

var et mere generelt forslag koden, uden hensyntagen til din sql.

men som jeg forstår dig nu ... får du rent faktisk opdateret i databasen - du får bare ikke værdien fra tekstboksen kan jeg så forstå - eller ?!?

... databinder du hver gang du loader siden, eller har du sørget for noget i denne stil:

if(!IsPostBack)
{
  BindData();
}

mvh
Avatar billede uc Nybegynder
15. juli 2005 - 22:37 #4
Hej snepnet.

Execute koden er herfra og jeg indrømmer at det er noget
kumme kode, (copy & paste i test er best.)
dbConn = new OleDbConnection(Application["strConnect_data"].ToString());
sql = "Select * From install";
IDbCommand  dbCmd1;
dbCmd1 = new OleDbCommand();
dbCmd1.CommandText = sql;
dbCmd1.Connection = dbConn;
IDataReader dbReader1;
dbConn.Open();
dbReader1 = dbCmd1.ExecuteReader();
DataGrid1.DataSource = dbReader1;
DataGrid1.DataBind();


newerminde jeg holder mig fra interfaces.GG (not)

jeg havde i min postback et ! tegn for meget, damm.

nå men smid et svar, så får du point.

Tak.
Rune.
Avatar billede snepnet Nybegynder
15. juli 2005 - 22:40 #5
du får et svar her :o)
mvh
(du skal bestemt ikke holde dig fra interfases.... det er bare ikke så relevant lige i dette tilfælde :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester