完整後台程式碼 (Code-Behind)
public partial class _Default : System.Web.UI.Page
{
SqlConnection sqlcon;
SqlCommand sqlcom;
string strCon = "Data Source=(local);Database=北風貿易;Uid=sa;Pwd=sa";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["SortOrder"] = "身份證號碼";
ViewState["OrderDire"] = "ASC";
BindData();
}
}
void BindData()
{
string sqlstr = "SELECT TOP 5 * FROM 飛狐工作室";
sqlcon = new SqlConnection(strCon);
SqlDataAdapter da = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
sqlcon.Open();
da.Fill(ds, "飛狐工作室");
GridView1.DataSource = ds;
GridView1.DataKeyNames = new[] { "身份證號碼" };
GridView1.DataBind();
// DataBound 後逐列截斷「家庭住址」欄位
for (int i = 0; i < GridView1.Rows.Count; i++)
{
DataRowView drv;
if (GridView1.PageIndex == 0)
drv = ds.Tables["飛狐工作室"].DefaultView[i];
else
drv = ds.Tables["飛狐工作室"].DefaultView[i + (5 * GridView1.PageIndex)];
string addr = Convert.ToString(drv["家庭住址"]);
GridView1.Rows[i].Cells[3].Text = SubStr(addr, 2); // 保留 2 字 + ...
}
sqlcon.Close();
}
string SubStr(string s, int len)
{
if (s.Length <= len) return s;
return s.Substring(0, len) + "...";
}
// ... 編輯/刪除/更新/取消編輯/RowDataBound 等事件處理略 ...
}
關鍵點補充
- 截斷邏輯置於
DataBind() 之後,確保資料已填入儲存格。
- 分頁時需換算
DefaultView 索引:i + PageSize * PageIndex。
SubStr 方法簡單處理,實務上建議依字元寬度 (全形/半形) 計算或使用 CSS text-overflow: ellipsis。
RowDataBound 事件中可加入滑鼠懸停提示完整內容 (Tooltip)。