【问题标题】:Retrieve DataTable value row by row逐行检索 DataTable 值
【发布时间】:2013-11-09 15:03:12
【问题描述】:

现在我想逐行检索数据表值。我已经找到了一种方法来完成它,但我无法得到我想要的结果。它只检索一行记录。这是代码:

MySqlConnection connStr = new MySqlConnection();
connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id";
MySqlCommand cmdSearch = new MySqlCommand(searchPerson, connStr);
connStr.Open();
cmdSearch.Parameters.AddWithValue("@id", "M000001");


MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();               
dt.Load(dtrRead2);

dtrRead2.Close();
connStr.Close();


if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
    String s = (String)(DataBinder.Eval(e.Item.DataItem, "PersonID"));
    String val = "";


    for (int i = 0; i < dt.Rows.Count ; i++) 
    {
        //val = dt.Rows[i]["PersonIDB"].ToString();

        if (dt.Rows[i]["PersonIDB"].ToString().Equals(s))
        e.Item.Visible = false;
        else
        e.Item.Visible = true;
    }

编辑

页面加载:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            try
            {
                MySqlConnection connStr = new MySqlConnection();
                connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
                String searchOverall = "SELECT PersonID, PersonName, Email, Picture FROM Person";
                MySqlCommand cmdSearch = new MySqlCommand(searchOverall, connStr);
                connStr.Open();

                MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();
                friendRepeater.DataSource = dtrRead2;
                friendRepeater.DataBind();
                dtrRead2.Close();
                dtrRead2 = null;

                connStr.Close();

            }
            catch (Exception ex)
            {
                //MessageBox.Show(ex.ToString());
            }            
        }             
    }

对于 ItemDataBound :

protected void ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        //String personID = "";
        DataTable dt = new DataTable();

        try
        {
            MySqlConnection connStr = new MySqlConnection();
            connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
            String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id";
            MySqlCommand cmdSearch = new MySqlCommand(searchPerson, connStr);
            connStr.Open();
            cmdSearch.Parameters.AddWithValue("@id", "M000001");

            MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();               
            dt.Load(dtrRead2);

            dtrRead2.Close();
            connStr.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            String s = (String)(DataBinder.Eval(e.Item.DataItem, "PersonID"));
            String val = "";


                for (int i = 0, count = dt.Rows.Count; i < count ; i++) 
                {
                     //val = dt.Rows[i]["PersonIDB"].ToString();
                    //DataRow dr = dt.Rows[i];

                    if (dt.Rows[i]["PersonIDB"].ToString().Equals(s))
                         e.Item.Visible = false;
                     else
                         e.Item.Visible = true;
                }              
        }
    }

【问题讨论】:

  • 您可能想从连接字符串中删除用户名/密码(并更改服务器上的密码...)

标签: c# asp.net datatable repeater


【解决方案1】:

您没有正确填充中继器。应该是这样的:

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td>'<%# Eval("PersonIDB")%>'</td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

中继器的 itemdatabound 可能如下所示:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // Do anything special you want for the item
    }
}

并且不要忘记将数据源绑定到转发器,通常在页面加载时:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LoadData();
    }
}

您的 LoadData() 方法应如下所示:

private void LoadData() 
{
    DataTable dt = new DataTable();
    MySqlConnection connStr = new MySqlConnection();
    connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;";
    String searchPerson = "SELECT PersonIDB from contactFriend WHERE PersonID = @id";
    MySqlCommand cmdSearch = new MySqlCommand(searchPerson, connStr);
    connStr.Open();
    cmdSearch.Parameters.AddWithValue("@id", "M000001");

    MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();
    dt.Load(dtrRead2);

    dtrRead2.Close();
    connStr.Close();

    Repeater1.DataSource = dt;
    Repeater1.DataBind();
}

编辑:

查看您的编辑后,我建议更改页面加载中的查询字符串:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        try
        {
            MySqlConnection connStr = new MySqlConnection();
            connStr.ConnectionString = "Server = localhost; Database = healthlivin; Uid = root; Pwd = khei92;"; PesronIDB
            //Change query to include PersonIDB               
            String searchOverall = "SELECT P.PersonID, P.PersonName, P.Email, P.Picture, CF.PersonIDB FROM Person P LEFT JOIN contactFriend  CF ON P.PersonID = CF.PersonID";
            MySqlCommand cmdSearch = new MySqlCommand(searchOverall, connStr);
            connStr.Open();

            MySqlDataReader dtrRead2 = cmdSearch.ExecuteReader();
            friendRepeater.DataSource = dtrRead2;
            friendRepeater.DataBind();
            dtrRead2.Close();
            dtrRead2 = null;

            connStr.Close();

        }
        catch (Exception ex)
        {
            //MessageBox.Show(ex.ToString());
        }            
    }             
}

在中继器的 itemdatabound 中,您不需要运行任何查询。

【讨论】:

  • 嗨.. 请看我的编辑。在此之前,我的页面加载中已经有了数据绑定。我把搜索语句放在 Itemdatabound 中是为了过滤数据。我这样弄错了吗?
  • 您只需在第一个查询中添加一个联接。请查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
相关资源
最近更新 更多