This is a migrated thread and some comments may be shown as answers.

RadGrid picking wrong record in Edit mode

3 Answers 163 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Hrvach
Top achievements
Rank 1
Hrvach asked on 02 Jan 2012, 11:19 AM
Hello!

I'm having some problems with RadGrid control. I added couple of controls (mostly TextBoxes and DropDownLists) so I could filter the RadGrid records. Filtering works fine, but whenever I try to Edit or Delete the row RadGrid picks the wrong record and I'm clueless about what to do to fix it.

Here is the .aspx part of the page:
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <telerik:RadScriptManager ID="RadScriptManager1" runat="server">
    </telerik:RadScriptManager>
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
        <ContentTemplate>
            <div class="fieldset">
                <fieldset>
                    <legend>Tvrtka</legend>
                    <telerik:RadComboBox ID="rcbTvrtka" runat="server" AppendDataBoundItems="true" Skin="Hay">
                    </telerik:RadComboBox>
                </fieldset>
            </div>
            <div class="fieldset">
                <fieldset>
                    <legend>Tip usera</legend>
                    <telerik:RadComboBox ID="rcbTipUsera" runat="server" AppendDataBoundItems="true"
                        Skin="Hay">
                    </telerik:RadComboBox>
                </fieldset>
            </div>
            <div class="fieldset3">
                <fieldset>
                    <legend>Aktivan</legend>
                    <asp:CheckBox ID="chkAktivan" runat="server" />
                </fieldset>
            </div>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnReset" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <div class="fieldset3">
        <fieldset>
            <legend>Pretraga</legend>
            <asp:Button ID="btnSearch" runat="server" Text="Traži" OnClick="btnSearch_Click" />
        </fieldset>
    </div>
    <div class="fieldset3">
        <fieldset>
            <legend>Reset</legend>
            <asp:Button ID="btnReset" runat="server" Text="Resetiraj" OnClick="btnReset_Click" />
        </fieldset>
    </div>
    <telerik:RadGrid ID="gvKontakti" runat="server" AllowPaging="True" AllowSorting="True"
        PageSize="25" AutoGenerateColumns="False" CellSpacing="0" GridLines="None" OnNeedDataSource="gvKontakti_NeedDataSource"
        AllowFilteringByColumn="False" Skin="Hay" OnItemDataBound="gvKontakti_ItemDataBound"
        OnPreRender="gvKontakti_PreRender" OnUpdateCommand="gvKontakti_UpdateCommand"
        OnDetailTableDataBind="gvKontakti_DetailTableDataBind" OnInsertCommand="gvKontakti_InsertCommand"
        OnItemCommand="gvKontakti_ItemCommand">
        <MasterTableView DataKeyNames="idKontakt" CommandItemDisplay="Top" InsertItemPageIndexAction="ShowItemOnCurrentPage"
            TableLayout="Fixed" Caption="Kontakti">
            <DetailTables>
                <telerik:GridTableView Name="Assets" Width="100%" CommandItemDisplay="None" Caption="Asseti">
                    <ParentTableRelation>
                        <telerik:GridRelationFields DetailKeyField="idKontakt" MasterKeyField="idKontakt" />
                    </ParentTableRelation>
                    <CommandItemSettings AddNewRecordText="Dodaj novi item" ShowAddNewRecordButton="true" />
                    <Columns>
                        <telerik:GridBoundColumn UniqueName="Naziv" DataField="NazivAsseta" HeaderText="Naziv"
                            HeaderStyle-Width="200px">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn UniqueName="DatumGarancije" HeaderText="Datum garancije"
                            DataField="DatumGarancije" DataFormatString="{0:dd.MM.yyyy.}" HeaderStyle-Width="100px">
                        </telerik:GridBoundColumn>
                    </Columns>
                    <EditFormSettings UserControlName="UserControls/TicketAssetUserControl.ascx" EditFormType="WebUserControl">
                        <EditColumn UniqueName="EditCommandColumnItem1">
                        </EditColumn>
                    </EditFormSettings>
                </telerik:GridTableView>
            </DetailTables>
            <DetailTables>
                <telerik:GridTableView DataKeyNames="idTicket" Name="Tickets" CommandItemDisplay="None"
                    Caption="Incidenti">
                    <Columns>
                        <telerik:GridBoundColumn UniqueName="TicketNumber" HeaderText="Broj incidenta" DataField="TicketNumber"
                            HeaderStyle-Width="70px">
                        </telerik:GridBoundColumn>
                        <telerik:GridDateTimeColumn DataField="DatumPrijave" HeaderText="Datum prijave" UniqueName="DatumPrijave"
                            PickerType="DatePicker" DataFormatString="{0:dd.MM.yyyy.}" HeaderStyle-Width="80px">
                        </telerik:GridDateTimeColumn>
                        <telerik:GridTemplateColumn UniqueName="Opis" HeaderText="Opis" DataField="Opis"
                            HeaderStyle-Width="400px">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Opis") %>'>
                                </asp:Label>
                                <telerik:RadToolTip ID="RadToolTip1" runat="server" TargetControlID="Label1" Width="150px"
                                    RelativeTo="Element" Position="MiddleRight" EnableShadow="false">
                                    <%# DataBinder.Eval(Container, "DataItem.Biljeske") %>
                                </telerik:RadToolTip>
                            </ItemTemplate>
                        </telerik:GridTemplateColumn>
                        <telerik:GridBoundColumn UniqueName="Status" HeaderText="Status" DataField="Status"
                            HeaderStyle-Width="80px">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn UniqueName="Prioritet" HeaderText="Prioritet" DataField="Prioritet"
                            HeaderStyle-Width="70px">
                        </telerik:GridBoundColumn>
                        <telerik:GridDateTimeColumn DataField="DatumDo" HeaderText="Deadline" UniqueName="Deadline"
                            PickerType="DatePicker" DataFormatString="{0:dd.MM.yyyy.}" HeaderStyle-Width="80px">
                        </telerik:GridDateTimeColumn>
                        <telerik:GridBoundColumn UniqueName="Tip" HeaderText="Tip" DataField="Tip" HeaderStyle-Width="80px">
                        </telerik:GridBoundColumn>
                        <telerik:GridCheckBoxColumn UniqueName="Naplacen" HeaderText="Naplaćen" DataField="IzdanRacun"
                            HeaderStyle-Width="65px">
                        </telerik:GridCheckBoxColumn>
                        <telerik:GridCheckBoxColumn UniqueName="Zatvoren" HeaderText="Zatvoren" DataField="Zatvoren"
                            HeaderStyle-Width="60px">
                        </telerik:GridCheckBoxColumn>
                        <telerik:GridBoundColumn UniqueName="DailySum" HeaderText="Efektivno vrijeme" DataField="DailySum"
                            HeaderStyle-Width="70px">
                        </telerik:GridBoundColumn>
                        <telerik:GridBoundColumn UniqueName="DailyCount" HeaderText="Broj dolazaka" DataField="DailyCount"
                            HeaderStyle-Width="70px">
                        </telerik:GridBoundColumn>
                    </Columns>
                </telerik:GridTableView>
            </DetailTables>
            <CommandItemSettings ShowAddNewRecordButton="true" AddNewRecordText="Dodaj novi kontakt" />
            <RowIndicatorColumn FilterControlAltText="Filter RowIndicator column">
            </RowIndicatorColumn>
            <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column">
            </ExpandCollapseColumn>
            <Columns>
                <telerik:GridEditCommandColumn UniqueName="EditCommandColumn" EditText="Detalji"
                    HeaderStyle-Width="50px">
                </telerik:GridEditCommandColumn>
                <telerik:GridBoundColumn UniqueName="Kontakt" DataField="Naziv" HeaderText="Kontakt"
                    HeaderStyle-Width="150px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Tvrtka" HeaderText="Tvrtka" DataField="Tvrtka"
                    HeaderStyle-Width="150px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Funkcija" HeaderText="Funkcija" DataField="Funkcija"
                    HeaderStyle-Width="150px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Tel1" HeaderText="Telefon 1" DataField="Tel1"
                    HeaderStyle-Width="100px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Tel2" HeaderText="Telefon 2" DataField="Tel2"
                    HeaderStyle-Width="100px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Mob1" HeaderText="Mobitel 1" DataField="Mob1"
                    HeaderStyle-Width="100px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Mob2" HeaderText="Mobitel 2" DataField="Mob2"
                    HeaderStyle-Width="100px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Email1" HeaderText="E-mail 1" DataField="Email1"
                    HeaderStyle-Width="100px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Adresa1" HeaderText="Adresa 1" DataField="Adresa1"
                    HeaderStyle-Width="150px">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn UniqueName="Grad" HeaderText="Grad" DataField="Grad" HeaderStyle-Width="100px">
                </telerik:GridBoundColumn>
                <telerik:GridCheckBoxColumn UniqueName="Aktivan" HeaderText="Aktivan" DataField="Aktivan"
                    HeaderStyle-Width="80px">
                </telerik:GridCheckBoxColumn>
                <telerik:GridButtonColumn UniqueName="DeleteColumn" Text="Delete" CommandName="Delete"
                    ConfirmDialogType="RadWindow" ConfirmText="Brisanjem kontakta briÅ¡u se i svi asseti!"
                    HeaderStyle-Width="50px">
                </telerik:GridButtonColumn>
            </Columns>
            <EditFormSettings UserControlName="UserControls/KontaktUserControl.ascx" EditFormType="WebUserControl">
                <EditColumn UniqueName="EditCommandColumn1">
                </EditColumn>
            </EditFormSettings>
        </MasterTableView>
        <FilterMenu EnableImageSprites="False">
        </FilterMenu>
        <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Hay">
        </HeaderContextMenu>
    </telerik:RadGrid>
</asp:Content>

Here is the .aspx.cs part of the page:
TSEntities db = new TSEntities();
 
protected void Page_Load(object sender, EventArgs e)
{
    int idAuthenticatedUser = Convert.ToInt32(Session["authenticatedUI"]);
 
    Kontakt kontakt = new Kontakt();
    kontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idAuthenticatedUser);
 
    if (Session["authenticatedUI"] == null)
    {
        Response.Redirect("Login.aspx");
    }
    else if (kontakt.idOvlasti == 3 || kontakt.idOvlasti == 4)
    {
        if (Request.RawUrl != "/KontaktiWebForm.aspx?idk=" + idAuthenticatedUser)
        {
            Response.Redirect("KontaktiWebForm.aspx?idk=" + idAuthenticatedUser);
        }
    }
 
    if (!IsPostBack)
    {
        Populate();
        chkAktivan.Checked = true;
    }
}
 
protected void Populate()
{
    var tvrtkaList = (from t in db.Firma
                      select t).ToList();
 
    var tvrtka = from t in tvrtkaList
                 orderby t.Naziv
                 select new { t.idFirma, t.Naziv };
 
    rcbTvrtka.Items.Clear();
    rcbTvrtka.Items.Add(new RadComboBoxItem("Odaberi tvrtku", "0"));
    rcbTvrtka.DataSource = tvrtka;
    rcbTvrtka.DataTextField = "Naziv";
    rcbTvrtka.DataValueField = "idFirma";
    rcbTvrtka.DataBind();
 
    var userType = from u in db.Ovlasti
                   select new { u.idOvlasti, u.Naziv };
 
    rcbTipUsera.Items.Add(new RadComboBoxItem("Odaberi tip", "0"));
    rcbTipUsera.DataSource = userType;
    rcbTipUsera.DataTextField = "Naziv";
    rcbTipUsera.DataValueField = "idOvlasti";
    rcbTipUsera.DataBind();
 
}
 
protected void gvKontakti_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
    int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);
    int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]);
 
    if (idKontakt > 0 && idAuthKontakt == idKontakt)
    {
        gvKontakti.DataSource = from k in db.Kontakt
                                where k.idKontakt == idKontakt && k.Aktivan == true
                                orderby k.Prezime, k.Ime
                                select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
    }
    else if (idKontakt > 0 && idAuthKontakt != idKontakt)
    {
      gvKontakti.DataSource = from k in db.Kontakt
                              where k.idKontakt == idKontakt && k.Aktivan == true
                                orderby k.Prezime, k.Ime
                                select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
    }
    else
    {
        gvKontakti.DataSource = from k in db.Kontakt
                                where k.Aktivan == true
                                orderby k.Prezime, k.Ime
                                select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
    }
}
 
protected void gvKontakti_ItemDataBound(object sender, GridItemEventArgs e)
{
    int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);
    int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]);
 
    if ((e.Item is GridEditFormItem) && e.Item.IsInEditMode)
    {
        UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
        GridEditFormItem editFormItem = (GridEditFormItem)e.Item;
 
        Button btnUpdate = (Button)userControl.FindControl("btnUpdate");
        TextBox txtUsername = (TextBox)userControl.FindControl("txtUsername");
        TextBox txtPassword = (TextBox)userControl.FindControl("txtPassword");
        RadComboBox rcbTvrtka = (RadComboBox)userControl.FindControl("rcbTvrtka");
        RadComboBox rcbOvlasti = (RadComboBox)userControl.FindControl("rcbOvlasti");
 
        Kontakt authKontakt = new Kontakt();
        authKontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idAuthKontakt);
 
        var tvrtkeList = (from t in db.Firma
                          orderby t.Naziv
                          select t).ToList();
 
        rcbTvrtka.DataSource = from t in tvrtkeList
                               select new { t.idFirma, t.Naziv };
 
        rcbTvrtka.DataTextField = "Naziv";
        rcbTvrtka.DataValueField = "idFirma";
        rcbTvrtka.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idFirma') %>'";
        rcbTvrtka.DataBind();
 
        rcbOvlasti.DataSource = from o in db.Ovlasti
                                select o;
 
        rcbOvlasti.DataTextField = "Naziv";
        rcbOvlasti.DataValueField = "idOvlasti";
        rcbOvlasti.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idOvlasti') %>'";
        rcbOvlasti.DataBind();
 
        rcbOvlasti.Items.FindItemByValue("4").Selected = true;
 
        if (authKontakt.idOvlasti == 4 || authKontakt.idOvlasti == 3 || authKontakt.idOvlasti == 2)
        {
            rcbOvlasti.Enabled = false;
        }
 
        if (authKontakt.idOvlasti == 4 || authKontakt.idOvlasti == 3)
        {
            rcbTvrtka.Enabled = false;
        }
 
        txtUsername.ReadOnly = false;
        txtPassword.ReadOnly = false;
 
        if (!e.Item.OwnerTableView.IsItemInserted)
        {
            Kontakt kontakt = new Kontakt();
 
            int idKontaktSelected = Convert.ToInt32(editFormItem.GetDataKeyValue("idKontakt"));
 
            kontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idKontaktSelected);
 
            if (idKontaktSelected == idAuthKontakt || authKontakt.idOvlasti == 2 || authKontakt.idOvlasti == 1)
            {
                txtUsername.ReadOnly = false;
                txtPassword.ReadOnly = false;
                btnUpdate.Visible = true;
            }
            else
            {
                txtUsername.ReadOnly = true;
                txtPassword.ReadOnly = true;
                btnUpdate.Visible = false;
            }
 
            int idTvrtka = Convert.ToInt16(kontakt.idFirma);
            rcbTvrtka.Items.FindItemByValue(idTvrtka.ToString()).Selected = true;
            Session["rcbTvrtka"] = idTvrtka;
 
            rcbOvlasti.Items.FindItemByValue(kontakt.idOvlasti.ToString()).Selected = true;
             
            CheckBox chkAktivan = (CheckBox)userControl.FindControl("chkAktivan");
 
            if (kontakt.Aktivan == true)
            {
                chkAktivan.Checked = true;
            }
            else
            {
                chkAktivan.Checked = false;
            }
        }
    }
 
}
 
protected void gvKontakti_PreRender(object sender, EventArgs e)
{
    int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);
 
    if (!this.IsPostBack && idKontakt > 0)
    {
        this.gvKontakti.MasterTableView.Items[0].Edit = true;
        this.gvKontakti.MasterTableView.Rebind();
    }
}
 
protected void gvKontakti_UpdateCommand(object sender, GridCommandEventArgs e)
{
    GridEditableItem editedItem = e.Item as GridEditableItem;
    UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
 
    RadComboBox rcbOvlasti = (RadComboBox)userControl.FindControl("rcbOvlasti");
    RadComboBox rcbTvrtka = (RadComboBox)userControl.FindControl("rcbTvrtka");
 
    int idKontakt = Convert.ToInt32(editedItem.GetDataKeyValue("idKontakt"));
 
    Kontakt kontakt = new Kontakt();
    kontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idKontakt);
 
    int idFirma = Convert.ToInt32(rcbTvrtka.SelectedItem.Value);
 
    kontakt.idFirma = Convert.ToInt32(rcbTvrtka.SelectedItem.Value);
    kontakt.Ime = (userControl.FindControl("txtIme") as TextBox).Text;
    kontakt.Prezime = (userControl.FindControl("txtPrezime") as TextBox).Text;
    kontakt.Adresa1 = (userControl.FindControl("txtAdresa1") as TextBox).Text;
    kontakt.Adresa2 = (userControl.FindControl("txtAdresa2") as TextBox).Text;
    kontakt.Adresa3 = (userControl.FindControl("txtAdresa3") as TextBox).Text;
    kontakt.Biljeske = (userControl.FindControl("txtBiljeske") as TextBox).Text;
    kontakt.Funkcija = (userControl.FindControl("txtFunkcija") as TextBox).Text;
    kontakt.Prezime = (userControl.FindControl("txtPrezime") as TextBox).Text;
    kontakt.Grad = (userControl.FindControl("txtGrad") as TextBox).Text;
    kontakt.Drzava = (userControl.FindControl("txtDrzava") as TextBox).Text;
    kontakt.PostanskiBroj = (userControl.FindControl("txtPBR") as TextBox).Text;
    kontakt.Mob1 = (userControl.FindControl("txtMob1") as TextBox).Text;
    kontakt.Mob2 = (userControl.FindControl("txtMob2") as TextBox).Text;
    kontakt.Tel1 = (userControl.FindControl("txtTel1") as TextBox).Text;
    kontakt.Tel2 = (userControl.FindControl("txtTel2") as TextBox).Text;
    kontakt.Fax = (userControl.FindControl("txtFax") as TextBox).Text;
    kontakt.Email1 = (userControl.FindControl("txtEmail1") as TextBox).Text;
    kontakt.Email2 = (userControl.FindControl("txtEmail2") as TextBox).Text;
    kontakt.Aktivan = (userControl.FindControl("chkAktivan") as CheckBox).Checked;
    kontakt.idOvlasti = Convert.ToInt32(rcbOvlasti.SelectedItem.Value);
     
    kontakt.Username = (userControl.FindControl("txtUsername") as TextBox).Text;
 
    string password = (userControl.FindControl("txtPassword") as TextBox).Text;
    string passwordHash = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");
 
    if (password.Length > 0)
    {
        kontakt.Password = passwordHash;
    }
               
    db.SaveChanges();
}
 
protected void gvKontakti_DetailTableDataBind(object sender, GridDetailTableDataBindEventArgs e)
{
    GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
 
    int idKontakt = Convert.ToInt16(dataItem.GetDataKeyValue("idKontakt"));
 
    switch (e.DetailTableView.Name)
    {
                                     
        case "Assets":
            {
                e.DetailTableView.DataSource = from a in db.Asset
                                               where a.idKontakt == idKontakt && a.Aktivan == true
                                               select new {a.idKontakt, NazivAsseta =  a.Naziv, a.DatumGarancije };
            }
            break;
 
        case "Tickets":
            {
                var ticketList = (from t in db.Ticket
                                  where t.idKontakt == idKontakt && t.Zatvoren == false
                                  select t).ToList();
 
                e.DetailTableView.DataSource = from t in ticketList
                                               where t.Zatvoren == false
                                               orderby t.idTicket, t.RedniBroj, t.DatumPrijave
                                               select new
                                               {
                                                   t.idTicket,
                                                   t.idFirma,
                                                   t.idKontakt,
                                                   t.idManager,
                                                   t.idNadredeniTicket,
                                                   TicketNumber = t.idNadredeniTicket + "-" + t.RedniBroj,
                                                   t.Biljeske,
                                                   t.DatumDo,
                                                   t.DatumPrijave,
                                                   t.OpciPrioritet,
                                                   t.Opis,
                                                   t.OpisZatvoren,
                                                   t.Prioritet,
                                                   t.Status,
                                                   t.Tip,
                                                   t.VrstaPrijave,
                                                   t.Zatvoren,
                                                   NazivKontakta = t.Kontakt == null ? "Bez kontakta" : t.Kontakt.Ime + " " + t.Kontakt.Prezime
                                               };
            }
            break;
                 
    }
}
 
protected void gvKontakti_InsertCommand(object sender, GridCommandEventArgs e)
{
    GridEditableItem editedItem = e.Item as GridEditableItem;
    UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
 
    TSEntities db = new TSEntities();
    Kontakt kontakt = new Kontakt();
 
    RadComboBox rcbTvrtka = (RadComboBox)userControl.FindControl("rcbTvrtka");
    RadComboBox rcbOvlasti = (RadComboBox)userControl.FindControl("rcbOvlasti");
 
    kontakt.idFirma = Convert.ToInt32(rcbTvrtka.SelectedItem.Value);
    kontakt.Ime = (userControl.FindControl("txtIme") as TextBox).Text;
    kontakt.Prezime = (userControl.FindControl("txtPrezime") as TextBox).Text;
    kontakt.Adresa1 = (userControl.FindControl("txtAdresa1") as TextBox).Text;
    kontakt.Adresa2 = (userControl.FindControl("txtAdresa2") as TextBox).Text;
    kontakt.Adresa3 = (userControl.FindControl("txtAdresa3") as TextBox).Text;
    kontakt.Biljeske = (userControl.FindControl("txtBiljeske") as TextBox).Text;
    kontakt.Funkcija = (userControl.FindControl("txtFunkcija") as TextBox).Text;
    kontakt.Prezime = (userControl.FindControl("txtPrezime") as TextBox).Text;
    kontakt.Grad = (userControl.FindControl("txtGrad") as TextBox).Text;
    kontakt.Drzava = (userControl.FindControl("txtDrzava") as TextBox).Text;
    kontakt.PostanskiBroj = (userControl.FindControl("txtPBR") as TextBox).Text;
    kontakt.Mob1 = (userControl.FindControl("txtMob1") as TextBox).Text;
    kontakt.Mob2 = (userControl.FindControl("txtMob2") as TextBox).Text;
    kontakt.Tel1 = (userControl.FindControl("txtTel1") as TextBox).Text;
    kontakt.Tel2 = (userControl.FindControl("txtTel2") as TextBox).Text;
    kontakt.Fax = (userControl.FindControl("txtFax") as TextBox).Text;
    kontakt.Email1 = (userControl.FindControl("txtEmail1") as TextBox).Text;
    kontakt.Email2 = (userControl.FindControl("txtEmail2") as TextBox).Text;
    kontakt.Aktivan = (userControl.FindControl("chkAktivan") as CheckBox).Checked;
    kontakt.idOvlasti = Convert.ToInt32(rcbOvlasti.SelectedItem.Value);
 
    kontakt.Username = (userControl.FindControl("txtUsername") as TextBox).Text;
 
    string passwordHash = FormsAuthentication.HashPasswordForStoringInConfigFile((userControl.FindControl("txtPassword") as TextBox).Text, "MD5");
    kontakt.Password = passwordHash;
 
    db.AddToKontakt(kontakt);
    db.SaveChanges();
 
}
 
protected void btnSearch_Click(object sender, EventArgs e)
{
    var kontakti = from k in db.Kontakt
                   select k;
 
    int idTipUsera = Convert.ToInt32(rcbTipUsera.SelectedValue);
    int idTvrtka = Convert.ToInt32(rcbTvrtka.SelectedValue);
 
    if (rcbTvrtka.SelectedValue != "0")
    {
        kontakti = kontakti.Where(k => k.idFirma == idTvrtka);
    }
 
    if (rcbTipUsera.SelectedValue != "0")
    {
        kontakti = kontakti.Where(k => k.idOvlasti == idTipUsera);
    }
 
    if (chkAktivan.Checked == true)
    {
        kontakti = kontakti.Where(k => k.Aktivan == true);
    }
    else
    {
        kontakti = kontakti.Where(k => k.Aktivan == false);
    }
 
 
    int idKontakt = Convert.ToInt32(Request.QueryString["idk"]);
    int idAuthKontakt = Convert.ToInt32(Session["authenticatedUI"]);
 
    if (idKontakt > 0 && idAuthKontakt == idKontakt)
    {
        gvKontakti.DataSource = from k in kontakti
                                where k.idKontakt == idKontakt
                                orderby k.Prezime, k.Ime
                                select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
    }
    else if (idKontakt > 0 && idAuthKontakt != idKontakt)
    {
        gvKontakti.DataSource = from k in kontakti
                                where k.idKontakt == idKontakt
                                orderby k.Prezime, k.Ime
                                select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
    }
    else
    {
        gvKontakti.DataSource = from k in kontakti
                                orderby k.Prezime, k.Ime
                                select new { Tvrtka = k.Firma.Naziv, k.idKontakt, Naziv = k.Ime + " " + k.Prezime, Funkcija = k.Funkcija, k.Ime, k.Prezime, k.Tel1, k.Tel2, k.Mob1, k.Mob2, k.Email1, k.Email2, k.Fax, k.Adresa1, k.Adresa2, k.Adresa3, k.Grad, k.PostanskiBroj, k.Drzava, k.Biljeske, k.Aktivan, k.Username, k.Password };
    }
 
    gvKontakti.DataBind();
}
 
protected void gvKontakti_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
        GridEditableItem editedItem = e.Item as GridEditableItem;
        int idKontakt = Convert.ToInt32(editedItem.GetDataKeyValue("idKontakt"));
 
        var assets = from a in db.Asset
                     where a.idKontakt == idKontakt
                     select a;
 
        Kontakt kontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idKontakt);
        int assetCount = db.Asset.Count(a => a.idKontakt == idKontakt);
 
        if (assetCount != 0)
        {
            foreach (var asset in assets)
            {
                db.DeleteObject(asset);
            }
        }
 
        db.DeleteObject(kontakt);
        db.SaveChanges();
    }
}
 
protected void btnReset_Click(object sender, EventArgs e)
{
    rcbTipUsera.Items.FindItemByValue("0").Selected = true;
    rcbTvrtka.Items.FindItemByValue("0").Selected = true;
    chkAktivan.Checked = true;
 
    gvKontakti.Rebind();
}

I apologize for the size of code posted but I think it could be useful to understand my problem better.

Thank you!

Regards,

Hrvoje

3 Answers, 1 is accepted

Sort by
0
Princy
Top achievements
Rank 2
answered on 02 Jan 2012, 11:50 AM
Hello,

This is not the expected behavior. You can bind the controls that you are using in UserControl as explained in this demo.
Grid / User Control Edit Form

Thanks,
Princy.
0
Hrvach
Top achievements
Rank 1
answered on 03 Jan 2012, 01:20 AM
Hello Princy,

thank you for your reply, but I have to admit that I'm not sure what do you mean by "This is not the expected behaviour.". Actually, I don't have problems with data binding, it works fine if I don't filter it, but as soon as I click the "Edit" button everything goes wrong.

So, still, any help would be appreciated.

Regards,

Hrvoje
0
Hrvach
Top achievements
Rank 1
answered on 03 Jan 2012, 05:56 PM
Could it be that when I click the Edit button it does the postback that triggers NeedDataSource event? Is there any solution to avoid it?
Tags
Grid
Asked by
Hrvach
Top achievements
Rank 1
Answers by
Princy
Top achievements
Rank 2
Hrvach
Top achievements
Rank 1
Share this question
or