заполнить DataTable данными вида сетки asp - PullRequest
0 голосов
/ 25 мая 2018

У меня есть вид сетки с текстовым полем.

    <asp:GridView ID="AgriGrid"
runat="server"
AutoGenerateColumns="false">
<Columns>
    <asp:TemplateField HeaderText="S. No.">
        <ItemTemplate>
            <asp:Label ID="lblagrigridsn" runat="server" Text='<%# Bind("sn") %>' />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="CROPS">
        <ItemTemplate>
            <asp:Label ID="lblcropsagrigrid" runat="server" Text='<%# Bind("crops") %>' />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="PRODUCTION">
        <ItemTemplate>
            <input type="number" min="0" value="0" id="txtAgriGridProduction" class="form-control" onkeypress="return numberOnly(event)" runat="server" autocomplete="off">
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="CULTIVATED LAND">
        <ItemTemplate>
            <asp:TextBox ID="txtAgriGridCultivatedLand" Width="80px" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="CULTIVATED LAND UNIT">
        <ItemTemplate>
            <asp:TextBox ID="txtAgriGridCultivatedUnit" Width="80px" runat="server"></asp:TextBox>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="SALES">
        <ItemTemplate>
            <input type="number" min="0" value="0" class="form-control" onkeypress="return numberOnly(event)" runat="server" id="txtAgriGridSell" autocomplete="off">
        </ItemTemplate>
    </asp:TemplateField>
</Columns>
</asp:GridView>

Пользователь заполняет объем производства в текстовом поле сетки txtAgriGridProduction.При нажатии кнопки отправки я пытаюсь вставить данные сетки asp в таблицу данных.Но я получаю нулевые значения.

Отправить код блока кнопки

 DataTable agricrops_dt = new DataTable();
agricrops_dt.Columns.Add(new DataColumn("CROPS", typeof(string)));
agricrops_dt.Columns.Add(new DataColumn("PRODUCTION", typeof(int)));
DataRow drow = null;
foreach (GridViewRow gr in AgriGrid.Rows)
{
    drow = agricrops_dt.NewRow();
    drow["CROPS"] = gr.Cells[1].Text;
    drow["PRODUCTION"] = gr.Cells[2].Text;
    agricrops_dt.Rows.Add(drow);
}

Но я получаю нулевые значения.Почему это так?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Проверяя ваш код, мы можем сказать, что изменим asp:TextBox на input type="text", затем сделаем

drow["CULTIVATED_LAND"] = ((HtmlInputControl)gr.FindControl("txtAgriGridCultivatedLand")).Value;
drow["CULTIVATED_LAND_UNIT"] = ((HtmlInputControl)gr.FindControl("txtAgriGridCultivatedUnit")).Value;

Но если вы хотите использовать asp:TextBox, тогда вы должны использовать

  drow["CULTIVATED_LAND"] =  ((TextBox)gr.FindControl("txtAgriGridCultivatedLand")).Text;
  drow["CULTIVATED_LAND_UNIT"] =  ((TextBox)gr.FindControl("txtAgriGridCultivatedUnit")).Text;

Надеюсь, это сработает.

0 голосов
/ 25 мая 2018

HTML-разметка

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:TemplateField HeaderText="S.No.">
                                <ItemTemplate>
                                    <asp:Label ID="lblagrigridsn" runat="server" Text='<%# Bind("sn") %>' />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="CROPS">
                                <ItemTemplate>
                                    <asp:Label ID="lblcropsagrigrid" runat="server" Text='<%# Bind("crop") %>' />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="PRODUCTION">
                                <ItemTemplate>
                                    <input type="text" min="0" value="0" class="form-control" onkeypress="return numberOnly(event)" runat="server" id="txtAgriGridProduction" autocomplete="off" />
                                </ItemTemplate>
                            </asp:TemplateField>
        </Columns>

    </asp:GridView>
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Crop]"></asp:SqlDataSource>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="Button" />

Код, стоящий за методом при нажатии кнопки

protected void Button1_Click1(object sender, EventArgs e)
{
    DataTable agricrops_dt = new DataTable();
    agricrops_dt.Columns.Add(new DataColumn("CROPS", typeof(string)));
    agricrops_dt.Columns.Add(new DataColumn("PRODUCTION", typeof(int)));
    DataRow drow = null;
    foreach (GridViewRow gr in GridView1.Rows)
    {
        drow = agricrops_dt.NewRow();
        drow["CROPS"] = ((Label)gr.FindControl("lblcropsagrigrid")).Text;
        drow["PRODUCTION"] = ((HtmlInputControl)gr.FindControl("txtAgriGridProduction")).Value;
        agricrops_dt.Rows.Add(drow);
    }


}

У вас есть данные в таблице данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...