Вернуть значение Dropdownlist в буквальный элемент управления в GridView - PullRequest
0 голосов
/ 06 октября 2019

Я создал форму для добавления подкатегории в зависимости от выбора пользователя из главной категории (выпадающий список). Вид сетки рассчитывается в зависимости от того видео GRIDVIEW (CRUD): https://www.youtube.com/watch?v=pH7E-GM8HjE

при вставке элемента;Первая ошибка: Ссылка на объект не установлена ​​для экземпляра объекта. Я анализирую предполагаемую ошибку, возможно, из поля Id, потому что, возможно, пусто. Я создаю новый столбец в gridview, чтобы передать значение из выпадающего списка в зависимости от свойства (Autopostpack), например:

Literal txtid =(Literal)gvsubcat.FooterRow.FindControl("TBF_footer");    
 txtid = RadioButtonList1.SelectedItem.Text;  

Ошибка не может неявно преобразовать строку типа в system.web.UI.webcontrol.Literal

Таким образом, существует новый способ решения этой ошибки. Я искал долгое время, чтобы решить ее, но здесь ничего нет исходного кода:

<asp:GridView ID="gvsubcat" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="Id" DataSourceID="SDS_Subcategory" ShowFooter="True" OnRowCancelingEdit="gvsubcat_RowCancelingEdit" OnRowCommand="gvsubcat_RowCommand" OnRowDeleting="gvsubcat_RowDeleting" OnRowEditing="gvsubcat_RowEditing" OnRowUpdating="gvsubcat_RowUpdating">  
                  
                  
                 <FooterStyle BackColor="White" ForeColor="#000066" />  
                <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />  
                <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />  
                <RowStyle ForeColor="#000066" />  
                <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />  
                <SortedAscendingCellStyle BackColor="#F1F1F1" />  
                <SortedAscendingHeaderStyle BackColor="#007DBB" />  
                <SortedDescendingCellStyle BackColor="#CAC9C9" />  
                <SortedDescendingHeaderStyle BackColor="#00547E" />  
                <Columns>  
                       <asp:BoundField DataField="C_Id" HeaderText="C_Id" SortExpression="C_Id"/>--%>  
  
          <asp:TemplateField HeaderText="Id">  
                <ItemTemplate>  
                     <asp:Label ID="lb_Id" Text='<%#Eval("C_Id") %>' runat="server"></asp:Label>  
                   </ItemTemplate>  
                   <EditItemTemplate>  
                       <asp:TextBox ID="lbE_Id" runat="server" Text='<%#Eval("C_Id") %>'></asp:TextBox>  
                   </EditItemTemplate>  
                   <FooterTemplate>  
                 <asp:Literal ID="TBF_footer" runat="server"></asp:Literal>  
                </FooterTemplate>  
                    </asp:TemplateField>  
  
                    <asp:TemplateField HeaderText="Name">  
                <ItemTemplate>  
                     <asp:Label ID="lb_Na" Text='<%#Eval("Su_Name") %>' runat="server"></asp:Label>  
                   </ItemTemplate>  
                   <EditItemTemplate>  
                       <asp:TextBox ID="Name_Edit" runat="server" Text='<%#Eval("Su_Name") %>'></asp:TextBox>  
                   </EditItemTemplate>  
                   <FooterTemplate>  
                       <asp:TextBox ID="Name_footer" runat="server"></asp:TextBox>  
               </FooterTemplate>  
  
                    </asp:TemplateField>  
                    <asp:TemplateField HeaderText="Ingredints">  
                    <ItemTemplate>  
                     <asp:Label ID="Lb_Ing" Text='<%#Eval("Ingredients") %>' runat="server"></asp:Label>  
                   </ItemTemplate>  
                   <EditItemTemplate>  
                       <asp:TextBox ID="Ing_Edit" runat="server" Text='<%#Eval("Ingredients") %>'></asp:TextBox>  
                   </EditItemTemplate>  
                   <FooterTemplate>  
                       <asp:TextBox ID="Ing_footer" runat="server"></asp:TextBox>  
                   </FooterTemplate>  
  
                    </asp:TemplateField>  
                    <asp:TemplateField HeaderText="price">  
                   <ItemTemplate>  
                     <asp:Label ID="Lb_pr" Text='<%#Eval("Price") %>' runat="server"></asp:Label>  
                   </ItemTemplate>  
                   <EditItemTemplate>  
                       <asp:TextBox ID="Pri_Edit" runat="server" Text='<%#Eval("Price") %>'></asp:TextBox>  
                   </EditItemTemplate>  
                   <FooterTemplate>  
                       <asp:TextBox ID="Pri_footer" runat="server"></asp:TextBox>  
                   </FooterTemplate>  
                    </asp:TemplateField>  
  
                    <asp:TemplateField HeaderText="Image">  
                   <ItemTemplate>  
                       <asp:Image ID="Img_item" runat="server" Height="80px" Width="80px" ImageUrl='<%#Eval("Image") %>' />  
                   </ItemTemplate>  
                   <EditItemTemplate>  
                       <asp:FileUpload ID="FU_Edit" runat="server" Visible="false"/>  
                   </EditItemTemplate>  
                   <FooterTemplate>  
                       <asp:FileUpload ID="FU_footer" runat="server" />  
                   </FooterTemplate>  
  
                    </asp:TemplateField>  
                    <asp:TemplateField HeaderText="Enable">  
                  <ItemTemplate>  
                <asp:CheckBox ID="Ch_SUcat" runat="server" Enabled='<%#Eval("Visible") %>' />  
            </ItemTemplate>  
            <EditItemTemplate>  
                 <asp:CheckBox ID="Ch_SUcat_E" runat="server" Enabled='<%#Eval("Visible") %>' />  
            </EditItemTemplate>  
            <FooterTemplate>  
                 <asp:CheckBox ID="Ch_SUcat_Footer" runat="server" />  
            </FooterTemplate>  
  
                    </asp:TemplateField>  
                    <asp:TemplateField>  
              <ItemTemplate>  
              <asp:ImageButton ID="imgb1" runat="server" ImageUrl="~/images/png/pencil.png" CommandName="Edit" Width="20px" Height="20px" />  
             <asp:ImageButton ID="imgb2"  runat="server" ImageUrl="~/images/png/delete.png" CommandName="Delete" Width="20px" Height="20px" />  
             </ItemTemplate>  
            <EditItemTemplate>  
              <asp:ImageButton ID="imgb3"  runat="server" ImageUrl="~/images/png/saveblue.png" CommandName="Update" Width="20px" Height="20px" />  
             <asp:ImageButton ID="imgb4"   runat="server" ImageUrl="~/images/png/cancel.png" CommandName="Cancel" Width="20px" Height="20px" />  
            </EditItemTemplate>  
            <FooterTemplate>  
              <asp:ImageButton ID="imgb5" runat="server" ImageUrl="~/images/png/addblue.png" CommandName="AddNew" Width="20px" Height="20px" />  
                </FooterTemplate>  
  
                    </asp:TemplateField>  
                </Columns>  
       
            </asp:GridView>  
<asp:ValidationSummary ID="VSummry" runat="server" ForeColor="Red" />  
            <asp:SqlDataSource ID="SDS_Subcategory" runat="server" ConflictDetection="CompareAllValues" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" DeleteCommand="DELETE FROM Sub_categories WHERE (C_Id = @C_Id)" InsertCommand="INSERT INTO [Sub_categories] ([Su_Name], [Ingredients], [Price], [Image], [Visible], [C_Id]) VALUES (@Su_Name, @Ingredients, @Price, @Image, @Visible, @C_Id)" OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT [Id], [Su_Name], [Ingredients], [Price], [Image], [Visible], [C_Id] FROM [Sub_categories] WHERE ([C_Id] = @C_Id)" UpdateCommand="UPDATE Sub_categories SET Su_Name = @Su_Name, Ingredients = @Ingredients, Price = @Price, Image = @Image, Visible = @Visible FROM Sub_categories INNER JOIN Categories ON Sub_categories.C_Id = Categories.C_Id WHERE (Sub_categories.C_Id = @C_Id)">  
                <DeleteParameters>  
                    <asp:Parameter Name="C_Id" />  
                </DeleteParameters>  
                <InsertParameters>  
                    <asp:Parameter Name="Su_Name" Type="String" />  
                    <asp:Parameter Name="Ingredients" Type="String" />  
                    <asp:Parameter Name="Price" Type="Decimal" />  
                    <asp:Parameter Name="Image" Type="String" />  
                    <asp:Parameter Name="Visible" Type="Boolean" />  
                    <asp:Parameter Name="C_Id" Type="Int32" />  
                </InsertParameters>  
                <SelectParameters>  
                    <asp:ControlParameter ControlID="RadioButtonList1" Name="C_Id" PropertyName="SelectedValue" Type="Int32" />  
                </SelectParameters>  
                <UpdateParameters>  
                    <asp:Parameter Name="Su_Name" Type="String" />  
                    <asp:Parameter Name="Ingredients" Type="String" />  
                    <asp:Parameter Name="Price" Type="Decimal" />  
                    <asp:Parameter Name="Image" Type="String" />  
                    <asp:Parameter Name="Visible" Type="Boolean" />  
                    <asp:Parameter Name="C_Id" Type="Int32" />  
                </UpdateParameters>  
            </asp:SqlDataSource>  
      
<br />  
<asp:Label ID="lblsuccessmessage" Text="" runat="server" ForeColor="Green"></asp:Label><br />  
<asp:Label ID="lblerrormessage" Text="" runat="server" ForeColor="Red"></asp:Label>  

C # Код сзади:

public partial class sub_category : System.Web.UI.Page  
{  
    string connectionString = @"Data Source=(local)\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DbCh.mdf;Integrated Security=True";  
  
    protected void Page_Load(object sender, EventArgs e)  
    {  
        if (!IsPostBack)  
        {  
            gvsubcat.DataBind();  
        }  
    }  
  
    protected void gvsubcat_RowCommand(object sender, GridViewCommandEventArgs e)  
    {  
        try  
        {  
              
            if (e.CommandName.Equals("AddNew"))  
            {  
                using (SqlConnection sqlcon = new SqlConnection(connectionString))  
                {  
                    FileUpload fu = (FileUpload)gvsubcat.FooterRow.FindControl("FU_footer");  
                    if (fu.HasFile)  
                    {  
                        string fileName = fu.FileName;  
                        string exten = Path.GetExtension(fileName);  
                        //here we have to restrict file type              
                        exten = exten.ToLower();  
                        string[] acceptedFileTypes = new string[4];  
                        acceptedFileTypes[0] = ".jpg";  
                        acceptedFileTypes[1] = ".jpeg";  
                        acceptedFileTypes[2] = ".gif";  
                        acceptedFileTypes[3] = ".png";  
                        bool acceptFile = false;  
                        for (int i = 0; i <= 3; i++)  
                        {  
                            if (exten == acceptedFileTypes[i])  
                            {  
                                acceptFile = true;  
                            }  
                        }  
                        if (!acceptFile)  
                        {  
                            lblerrormessage.Text = "The file you are trying to upload is not a permitted file type!";  
                        }  
                        else  
                        {  
                            //upload the file onto the server                     
                            fu.SaveAs(Server.MapPath("~/images/categories/" + fileName));  
                            //Open Connection with D.B  
                            sqlcon.Open();  
                             string query = "INSERT INTO Sub_categories(Su_Name,Ingredients,Price,Image,Visible,C_Id) VALUES(@Su_Name,@Ingredients,@Price,@Image,@Visible,@C_Id)";  
                            SqlCommand sqlcmd = new SqlCommand(query, sqlcon);  
                            sqlcmd.Parameters.AddWithValue("@C_Id", (gvsubcat.FooterRow.FindControl("TBF_footer") as TextBox).Text.Trim());  
                            sqlcmd.Parameters.AddWithValue("@Su_Name", (gvsubcat.FooterRow.FindControl("Name_footer") as TextBox).Text.Trim());  
                            sqlcmd.Parameters.AddWithValue("@Ingredients", (gvsubcat.FooterRow.FindControl("Ing_footer") as TextBox).Text.Trim());  
                            sqlcmd.Parameters.AddWithValue("@Price", (gvsubcat.FooterRow.FindControl("Pri_footer") as TextBox).Text.Trim());  
                            sqlcmd.Parameters.AddWithValue("@Image", fileName);  
                            //sqlcmd.Parameters.AddWithValue("@Visible", Convert.ToBoolean((gvsubcat.FooterRow.FindControl("Ch_SUcat_Footer") as CheckBox)));  
                            sqlcmd.Parameters.AddWithValue("@Visible", (gvsubcat.FooterRow.FindControl("Ch_SUcat_Footer.text") as CheckBox));  
  
                            sqlcmd.ExecuteNonQuery();  
                            gvsubcat.DataBind();  
                            lblsuccessmessage.Text = "New Record Added";  
                            lblerrormessage.Text = "";  
  
                        }  
                    }  
                }  
            }  
        }  
        catch (Exception ex)  
        {  
  
            lblsuccessmessage.Text = "";  
            lblerrormessage.Text = ex.Message;  
        }  
    }  
  
    protected void gvsubcat_RowEditing(object sender, GridViewEditEventArgs e)  
    {  
        gvsubcat.EditIndex = e.NewEditIndex;  
        gvsubcat.DataBind();  
    }  
  
    protected void gvsubcat_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)  
    {  
        gvsubcat.EditIndex = -1;  
        gvsubcat.DataBind();  
    }  
  
    protected void gvsubcat_RowDeleting(object sender, GridViewDeleteEventArgs e)  
    {  
        try  
        {  
            using (SqlConnection sqlcon = new SqlConnection(connectionString))  
            {  
                sqlcon.Open();  
                string query = "DELETE FROM Categories where Sub_categories.Id =@Id";  
                SqlCommand sqlcmd = new SqlCommand(query, sqlcon);  
                sqlcmd.Parameters.AddWithValue("@Id", Convert.ToInt32(gvsubcat.DataKeys[e.RowIndex].Value.ToString()));  
                sqlcmd.ExecuteNonQuery();  
                gvsubcat.DataBind();  
                lblsuccessmessage.Text = "Selected Record has been Deleted.";  
                lblerrormessage.Text = "";  
            }  
        }  
        catch (Exception ex)  
        {  
            lblsuccessmessage.Text = "";  
            lblerrormessage.Text = ex.Message;  
        }  
    }  
  
    protected void gvsubcat_RowUpdating(object sender, GridViewUpdateEventArgs e)  
    {  
        try  
        {  
            using (SqlConnection sqlcon = new SqlConnection(connectionString))  
            {  
                sqlcon.Open();  
                string query = "UPDATE Sub_categories SET Su_Name=@Su_Name, Ingredients=@Ingredients, Price=@Price, Image=@Image, Visible=@Visible where Sub_categories.Id=@Id";  
                SqlCommand sqlcmd = new SqlCommand(query, sqlcon);  
                sqlcmd.Parameters.AddWithValue("@Su_Name", (gvsubcat.FooterRow.FindControl("Name_Edit") as TextBox));  
                sqlcmd.Parameters.AddWithValue("@Ingredients", (gvsubcat.FooterRow.FindControl("Ing_Edit") as TextBox));  
                sqlcmd.Parameters.AddWithValue("@Price", (gvsubcat.FooterRow.FindControl("Pri_Edit") as TextBox));  
                sqlcmd.Parameters.AddWithValue("@Image", (gvsubcat.FooterRow.FindControl("FU_Edit")as FileUpload));  
                sqlcmd.Parameters.AddWithValue("@Visible", Convert.ToBoolean((gvsubcat.FooterRow.FindControl("Ch_SUcat_E") as CheckBox).Checked));  
                FileUpload fu = (FileUpload)gvsubcat.FindControl("FU_Edit");  
  
                if (fu.HasFile)  
                {  
  
                    string file = System.IO.Path.Combine(Server.MapPath("~/images/categories/"), fu.FileName);  
                    fu.SaveAs(file);  
  
                }  
  
                sqlcmd.Parameters.AddWithValue("@Id", Convert.ToInt32(gvsubcat.DataKeys[e.RowIndex].Value.ToString()));  
  
                sqlcmd.ExecuteNonQuery();  
                gvsubcat.EditIndex = -1;  
                gvsubcat.DataBind();  
                lblsuccessmessage.Text = "Selected Record has been Updated.";  
                lblerrormessage.Text = "";  
            }  
        }  
        catch (Exception ex)  
        {  
  
            lblsuccessmessage.Text = "";  
            lblerrormessage.Text = ex.Message;  
        }  
  
    }  
  
    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)  
    {  
        Literal txtid = (Literal)gvsubcat.FooterRow.FindControl("TBF_footer");  
        txtid = RadioButtonList1.SelectedItem.Text;  
  
    }  
}  
...