如何从asp.net中的datatable填充gridview
问题描述:
我想从datatable填写gridview
我的gridview是
I want to fill gridview from datatable
My gridview is
<asp:GridView runat="server" ID="GridView1" BackColor="White"
BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3"
HorizontalAlign="Center" AutoGenerateColumns="False">
<FooterStyle BackColor="White" ForeColor="#000066" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White"
HorizontalAlign="Center" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<RowStyle ForeColor="#000066" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="Serial Number">
<ItemTemplate>
<asp:TextBox ID="txtSNo" runat="server" BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Internal Serial Number">
<ItemTemplate>
<asp:TextBox ID="txtISNo" runat="server" BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Waranty">
<ItemTemplate>
<asp:TextBox ID="txtWaranty" runat="server" BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Start">
<ItemTemplate>
<asp:TextBox ID="txtWStart" runat="server"
BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="End">
<ItemTemplate>
<asp:TextBox ID="txtWEnd" runat="server" BackColor="AntiqueWhite">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:TextBox ID="txtStatus" runat="server" BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
internal void CreateGrid(int rows,string invoice)
{
dt = new DataTable();
dt.Columns.Add(new DataColumn("Serial Number", typeof(string)));
dt.Columns.Add(new DataColumn("Internal Serial Number", typeof(string)));
dt.Columns.Add(new DataColumn("Waranty", typeof(string)));
dt.Columns.Add(new DataColumn("Start", typeof(string)));
dt.Columns.Add(new DataColumn("End", typeof(string)));
dt.Columns.Add(new DataColumn("Status", typeof(string)));
using (cmd = new SqlCommand("sp_IPurchaseDetail", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@InvoiceNumber", invoice));
cmd.Parameters.Add(new SqlParameter("@ItemCode", ""));
cmd.Parameters.Add(new SqlParameter("@SubItemCode", ""));
cmd.Parameters.Add(new SqlParameter("@SerialNumber", ""));
cmd.Parameters.Add(new SqlParameter("@ISerialNumber",""));
cmd.Parameters.Add(new SqlParameter("@Waranty", ""));
cmd.Parameters.Add(new SqlParameter("@WarantyStartDate", ""));
cmd.Parameters.Add(new SqlParameter("@WarantyEndDate", ""));
cmd.Parameters.Add(new SqlParameter("@Status", ""));
cmd.Parameters.Add(new SqlParameter("@Issued", ""));
cmd.Parameters.Add(new SqlParameter("@StockIn",""));
cmd.Parameters.Add(new SqlParameter("@Mode", "S"));
if (con.State == ConnectionState.Closed)
con.Open();
da = new SqlDataAdapter(cmd);
ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
GridView1.AutoGenerateColumns = false;
for (int i = 0; i < NoOfRows; i++)
{
dr = dt.NewRow();
string gh = ds.Tables[0].Rows[i][3].ToString();
dr["Serial Number"] = ds.Tables[0].Rows[i][4].ToString();
dr["Internal Serial Number"] = ds.Tables[0].Rows[i][5].ToString();
dr["Waranty"] = ds.Tables[0].Rows[i][6].ToString();
dr["Start"] = ds.Tables[0].Rows[i][7].ToString();
dr["End"] = ds.Tables[0].Rows[i][8].ToString();
dr["Status"] = ds.Tables[0].Rows[i][9].ToString();
dt.Rows.Add(dr);
}
// ViewState["CurrentTable"] = dt;
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
GridView1.Visible = true;
}
Datatable有数据,但无法填充gridview。
Datatable has data but it could not fill gridview.
答
使用gridView的GridView1_RowDataBound事件
添加以下行DataKeyNames =序列号,内部序列号,保修
use GridView1_RowDataBound event of gridView
Add Following Line DataKeyNames="Serial Number,Internal Serial Number,Waranty"
<asp:gridview runat="server" id="GridView1" backcolor="White" xmlns:asp="#unknown">DataKeyNames="Serial Number,Internal Serial Number,Waranty"></asp:gridview>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
TextBox txtvalue;
if (e.Row.RowType == DataControlRowType.DataRow)
{
txtvalue = (TextBox)e.Row.FindControl("txtSNo");
txtvalue.Text=GridView1.DataKeys[e.Row.RowIndex]["txtSNo"].ToString();
//Same for others..
}
}
您必须为文本框指定文本值。使用以下语法Text ='<%#Eval(Column Name)%>'
源代码的示例代码:
You have to assign a Text Value to the textbox. by using the following syntaxText='<%# Eval("Column Name") %>'
Sample code for your source code:
<asp:TemplateField HeaderText="Serial Number">
<ItemTemplate>
<asp:TextBox ID="txtSNo" runat="server" Text='<%# Eval("Serial Number") %>' BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Internal Serial Number">
<ItemTemplate>
<asp:TextBox ID="txtISNo" runat="server" Text='<%# Eval("Internal Serial Number") %>' BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Waranty">
<ItemTemplate>
<asp:TextBox ID="txtWaranty" runat="server" Text='<%# Eval("Waranty") %>' BackColor="AntiqueWhite"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>