【问题标题】:DataTable with Rows will not bind to Gridview带有行的 DataTable 不会绑定到 Gridview
【发布时间】:2014-10-22 10:52:25
【问题描述】:

我正在尝试构建一个允许使用文本区域进行批量 SQL 搜索的简单页面。文本框在每一行上拆分,每一行作为查询的参数。然后将结果行添加到 DataTable。

查询没有问题,并且在通过调试模式检查时,DataTable 已按预期构建并返回。唯一的问题是当我尝试将 DataTable 绑定到 gridview 时,gridview 没有行。

我现在一直在摸索这个问题,无法弄清楚为什么 DataTable 不会绑定。列名全部匹配,但结果中的实际表未命名。这是个问题吗?

这是代码。

ASPX:

    <asp:GridView 
        ID="GridView1" 
        runat="server"            
        AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="SIM NUMBER" HeaderText="SIM NUMBER" />
            <asp:BoundField DataField="Voice" HeaderText="Voice" />
            <asp:BoundField DataField="IMSI" HeaderText="IMSI" />
            <asp:BoundField DataField="Tariff" HeaderText="Tariff" />
            <asp:BoundField DataField="Contract Start" HeaderText="Contract Start" />
            <asp:BoundField DataField="Supplier" HeaderText="Supplier" />
        </Columns>
    </asp:GridView>  

还有 C# 代码:

public partial class Query : System.Web.UI.Page
{
    protected static string numbers = "";
    protected static string number;
    protected static DataTable result = new DataTable();

    protected static string simNumber;
    protected static string voice;
    protected static string IMSI;
    protected static string tariff;
    protected static string contractStart;
    protected static string supplier;


    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        result.Reset();
        result.Columns.Add("SIM NUMBER", typeof(string));
        result.Columns.Add("Voice", typeof(string));
        result.Columns.Add("IMSI", typeof(string));
        result.Columns.Add("Tariff", typeof(string));
        result.Columns.Add("Contract Start", typeof(string));
        result.Columns.Add("Supplier", typeof(string));
        numbers = TextArea1.Value.ToString();
        search();
        GridView1.DataSource = result;
        GridView1.DataBind();
    }

    protected static void search()
    {
        string[] split = numbers.Split(new string[] { "\r\n" }, StringSplitOptions.None);

        foreach (string line in split)
        {
            if (line == string.Empty)
                continue;

            number = line;
            getSupplierInfo();
        }
    }

    protected static void getSupplierInfo()
    {
        DataTable DT = new DataTable();
        using (SqlConnection conn = new SqlConnection(connections.supplierInfo()))
        {
            string sql = " SELECT * FROM UnionSuppliers WHERE SIM_NUMBER LIKE @parameter ";
            conn.Open();

            using (SqlCommand select = new SqlCommand
            {
                CommandType = CommandType.Text,
                CommandTimeout = 300,
                CommandText = sql,
                Connection = conn
            })
            {                    
                select.Parameters.AddWithValue("@parameter", number);
                SqlDataAdapter adapter = new SqlDataAdapter();
                DataSet ds = new DataSet();
                adapter.SelectCommand = select;
                adapter.Fill(ds);
                DT = ds.Tables[0];
            }

        }
        foreach (DataRow dr in DT.Rows)
        {
            simNumber = dr["SIM_NUMBER"].ToString();
            voice = dr["Voice"].ToString();
            IMSI = dr["IMSI"].ToString();
            tariff = dr["Tariff"].ToString();
            contractStart = dr["Contract_start"].ToString();
            supplier = dr["Supplier"].ToString();
            addRow();
        }
    }

    protected static void addRow()
    {
        DataRow simResult = result.NewRow();

        simResult["SIM Number"] = simNumber;
        simResult["Voice"] = voice;
        simResult["IMSI"] = IMSI;
        simResult["Tariff"] = tariff;
        simResult["Contract Start"] = contractStart;
        simResult["Supplier"] = supplier;
        result.Rows.Add(simResult);
    }
}

任何帮助将不胜感激。我敢肯定,我错过了一些非常简单的东西。

谢谢

【问题讨论】:

  • 不要使用静态数据表,那样会产生最好的锁。
  • 好的,问题解决了。它需要设置一个 DataKey Name。知道这很简单。

标签: c# asp.net gridview datatable


【解决方案1】:

尝试改变:

AutoGenerateColumns="false"

到:

AutoGenerateColumns="true"

【讨论】:

  • 否 没用。我不确定这是我手动设置列绑定的问题。
【解决方案2】:

我认为你可以在 aspx 文件中这样尝试

<Columns>
    <ItemTemplate> 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Your_Field_Name") %>'></asp:Label> 
    </ItemTemplate>
</Columns>

并且在cs文件中正好适合下面的代码

    DataTable DT = new DataTable();
    using (SqlConnection conn = new SqlConnection(connections.supplierInfo()))
    {
        string sql = " SELECT * FROM UnionSuppliers WHERE SIM_NUMBER LIKE @parameter ";
        conn.Open();

        using (SqlCommand select = new SqlCommand
        {
            CommandType = CommandType.Text,
            CommandTimeout = 300,
            CommandText = sql,
            Connection = conn
        })
        {                    
            select.Parameters.AddWithValue("@parameter", number);
            SqlDataAdapter adapter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            adapter.SelectCommand = select;
            adapter.Fill(ds);
            DT = ds.Tables[0];
        }

    }

现在将您的数据表绑定到网格视图。

    GridView1.DataSource = DT;
    GridView1.DataBind();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2010-10-30
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多